/** * Function description * * @return 0 on success, otherwise a Win32 error code */ static UINT cliprdr_virtual_channel_event_terminated(cliprdrPlugin* cliprdr) { cliprdr_remove_init_handle_data(cliprdr->InitHandle); free(cliprdr); return CHANNEL_RC_OK; }
static void cliprdr_virtual_channel_event_terminated(cliprdrPlugin* cliprdr) { MessagePipe_PostQuit(cliprdr->MsgPipe, 0); WaitForSingleObject(cliprdr->thread, INFINITE); MessagePipe_Free(cliprdr->MsgPipe); CloseHandle(cliprdr->thread); cliprdr->channelEntryPoints.pVirtualChannelClose(cliprdr->OpenHandle); if (cliprdr->data_in) { Stream_Free(cliprdr->data_in, TRUE); cliprdr->data_in = NULL; } cliprdr_remove_open_handle_data(cliprdr->OpenHandle); cliprdr_remove_init_handle_data(cliprdr->InitHandle); }