static void svc_plugin_process_terminated(rdpSvcPlugin* plugin) { svc_data_in_item* item; freerdp_thread_stop(plugin->priv->thread); freerdp_thread_free(plugin->priv->thread); plugin->channel_entry_points.pVirtualChannelClose(plugin->priv->open_handle); xfree(plugin->channel_entry_points.pExtendedData); svc_plugin_remove(plugin); while ((item = list_dequeue(plugin->priv->data_in_list)) != NULL) svc_data_in_item_free(item); list_free(plugin->priv->data_in_list); if (plugin->priv->data_in != NULL) { stream_free(plugin->priv->data_in); plugin->priv->data_in = NULL; } xfree(plugin->priv); plugin->priv = NULL; IFCALL(plugin->terminate_callback, plugin); }
static void svc_plugin_process_terminated(rdpSvcPlugin* plugin) { plugin->channel_entry_points.pVirtualChannelClose(plugin->priv->open_handle); svc_plugin_remove(plugin); if (plugin->priv->data_in != NULL) { stream_free(plugin->priv->data_in); plugin->priv->data_in = NULL; } xfree(plugin->priv); plugin->priv = NULL; plugin->terminate_callback(plugin); }
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); }