A call handle remains valid after the call has been dropped. This enables applications to use operations such as lineGetCallInfo to retrieve call information for logging purposes. Once an application knows it has all the information it needs about a call and it has received a LINE_CALLSTATE(LINECALLSTATE_IDLE) message, it should call lineDeallocateCall to free system-allocated memory related to the call. The application must itself free memory that it allocated for its own purposes.
The way to free an idle call is to deallocate its handle with lineDeallocateCall. The application's duty to free a call is independent of the reason the call went idle. That is, the handle must be deallocated whether it was the local or the remote application that dropped it. If an application is the owner of the call, it can deallocate the call's handle only if the call is in the idle state. If monitoring the call, it can deallocate the call handle at any time.
It is better to process the LINE_CALLSTATE(LINECALLSTATE_IDLE) message (and all other call-state notifications) consistently in one location regardless of its cause.