Exemplo n.º 1
0
int freerdp_channels_global_uninit(void)
{
	while (g_channels_list)
		freerdp_channels_free(g_channels_list->channels);

	freerdp_mutex_free(g_mutex_init);
	freerdp_mutex_free(g_mutex_list);

	return 0;
}
Exemplo n.º 2
0
int freerdp_chanman_global_uninit(void)
{
	while (g_chan_man_list)
		freerdp_chanman_free(g_chan_man_list->chan_man);

	freerdp_mutex_free(g_mutex_init);
	freerdp_mutex_free(g_mutex_list);

	return 0;
}
Exemplo n.º 3
0
boolean WTSVirtualChannelClose(
    /* __in */ void* hChannelHandle)
{
    wts_data_item* item;
    rdpPeerChannel* channel = (rdpPeerChannel*) hChannelHandle;

    if (channel != NULL)
    {
        if (channel->index < channel->client->settings->num_channels)
            channel->client->settings->channels[channel->index].handle = NULL;
        stream_free(channel->receive_data);
        if (channel->receive_event)
            wait_obj_free(channel->receive_event);
        if (channel->receive_queue)
        {
            while ((item = (wts_data_item*) list_dequeue(channel->receive_queue)) != NULL)
            {
                wts_data_item_free(item);
            }
            list_free(channel->receive_queue);
        }
        if (channel->mutex)
            freerdp_mutex_free(channel->mutex);
        xfree(channel);
    }

    return true;
}
Exemplo n.º 4
0
void freerdp_channels_free(rdpChannels * chan_man)
{
	rdpChannelsList* list;
	rdpChannelsList* prev;

	freerdp_mutex_free(chan_man->sync_data_mutex);
	list_free(chan_man->sync_data_list);

	freerdp_sem_free(chan_man->event_sem);
	wait_obj_free(chan_man->signal);

	/* Remove from global list */
	freerdp_mutex_lock(g_mutex_list);
	for (prev = NULL, list = g_channels_list; list; prev = list, list = list->next)
	{
		if (list->channels == chan_man)
			break;
	}
	if (list)
	{
		if (prev)
			prev->next = list->next;
		else
			g_channels_list = list->next;
		xfree(list);
	}
	freerdp_mutex_unlock(g_mutex_list);

	xfree(chan_man);
}
Exemplo n.º 5
0
void WTSDestroyVirtualChannelManager(WTSVirtualChannelManager* vcm)
{
	wts_data_item* item;
	rdpPeerChannel* channel;

	if (vcm != NULL)
	{
		while ((channel = (rdpPeerChannel*) list_dequeue(vcm->dvc_channel_list)) != NULL)
		{
			WTSVirtualChannelClose(channel);
		}
		list_free(vcm->dvc_channel_list);
		if (vcm->drdynvc_channel != NULL)
		{
			WTSVirtualChannelClose(vcm->drdynvc_channel);
			vcm->drdynvc_channel = NULL;
		}

		wait_obj_free(vcm->send_event);
		while ((item = (wts_data_item*) list_dequeue(vcm->send_queue)) != NULL)
		{
			wts_data_item_free(item);
		}
		list_free(vcm->send_queue);
		freerdp_mutex_free(vcm->mutex);
		xfree(vcm);
	}
}
Exemplo n.º 6
0
void test_mutex(void)
{
	freerdp_mutex mutex;

	mutex = freerdp_mutex_new();
	freerdp_mutex_lock(mutex);
	freerdp_mutex_unlock(mutex);
	freerdp_mutex_free(mutex);
}
Exemplo n.º 7
0
void freerdp_thread_free(freerdp_thread* thread)
{
	int i;

	for (i = 0; i < thread->num_signals; i++)
		wait_obj_free(thread->signals[i]);
	thread->num_signals = 0;

	freerdp_mutex_free(thread->mutex);
	thread->mutex = NULL;

	xfree(thread);
}
Exemplo n.º 8
0
boolean WTSVirtualChannelClose(
	/* __in */ void* hChannelHandle)
{
	STREAM* s;
	wts_data_item* item;
	WTSVirtualChannelManager* vcm;
	rdpPeerChannel* channel = (rdpPeerChannel*) hChannelHandle;

	if (channel)
	{
		vcm = channel->vcm;

		if (channel->channel_type == RDP_PEER_CHANNEL_TYPE_SVC)
		{
			if (channel->index < channel->client->settings->num_channels)
				channel->client->settings->channels[channel->index].handle = NULL;
		}
		else
		{
			freerdp_mutex_lock(vcm->mutex);
			list_remove(vcm->dvc_channel_list, channel);
			freerdp_mutex_unlock(vcm->mutex);

			if (channel->dvc_open_state == DVC_OPEN_STATE_SUCCEEDED)
			{
				s = stream_new(8);
				wts_write_drdynvc_header(s, CLOSE_REQUEST_PDU, channel->channel_id);
				WTSVirtualChannelWrite(vcm->drdynvc_channel, stream_get_head(s), stream_get_length(s), NULL);
				stream_free(s);
			}
		}
		if (channel->receive_data)
			stream_free(channel->receive_data);
		if (channel->receive_event)
			wait_obj_free(channel->receive_event);
		if (channel->receive_queue)
		{
			while ((item = (wts_data_item*) list_dequeue(channel->receive_queue)) != NULL)
			{
				wts_data_item_free(item);
			}
			list_free(channel->receive_queue);
		}
		if (channel->mutex)
			freerdp_mutex_free(channel->mutex);
		xfree(channel);
	}
	return true;
}