void freerdp_channels_free(rdpChannels* channels) { rdpChannelsList* list; rdpChannelsList* prev; MessagePipe_Free(channels->MsgPipe); /* Remove from global list */ WaitForSingleObject(g_mutex_list, INFINITE); for (prev = NULL, list = g_channels_list; list; prev = list, list = list->next) { if (list->channels == channels) break; } if (list) { if (prev) prev->next = list->next; else g_channels_list = list->next; free(list); } ReleaseMutex(g_mutex_list); free(channels); }
void freerdp_channels_free(rdpChannels* channels) { MessagePipe_Free(channels->MsgPipe); /* TODO: remove from channels list */ free(channels); }
void freerdp_channels_free(rdpChannels* channels) { MessagePipe_Free(channels->MsgPipe); ArrayList_Lock(g_ChannelsList); ArrayList_Remove(g_ChannelsList, channels); ArrayList_Unlock(g_ChannelsList); free(channels); }
static void remdesk_virtual_channel_event_terminated(remdeskPlugin* remdesk) { MessagePipe_PostQuit(remdesk->MsgPipe, 0); WaitForSingleObject(remdesk->thread, INFINITE); MessagePipe_Free(remdesk->MsgPipe); CloseHandle(remdesk->thread); remdesk->channelEntryPoints.pVirtualChannelClose(remdesk->OpenHandle); if (remdesk->data_in) { Stream_Free(remdesk->data_in, TRUE); remdesk->data_in = NULL; } remdesk_remove_open_handle_data(remdesk->OpenHandle); remdesk_remove_init_handle_data(remdesk->InitHandle); }
static void svc_plugin_process_terminated(rdpSvcPlugin* plugin) { MessagePipe_PostQuit(plugin->MsgPipe, 0); WaitForSingleObject(plugin->thread, INFINITE); MessagePipe_Free(plugin->MsgPipe); CloseHandle(plugin->thread); plugin->channel_entry_points.pVirtualChannelClose(plugin->open_handle); svc_plugin_remove(plugin); if (plugin->data_in) { stream_free(plugin->data_in); plugin->data_in = NULL; } IFCALL(plugin->terminate_callback, plugin); }
void freerdp_channels_free(rdpChannels* channels) { MessagePipe_Free(channels->MsgPipe); free(channels); }