Exemple #1
0
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);
}
Exemple #2
0
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);
}
Exemple #3
0
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);
}