Beispiel #1
0
/**
 * called only from main thread
 */
static void freerdp_chanman_process_sync(rdpChanMan* chan_man, freerdp* instance)
{
	struct chan_data* lchan_data;
	rdpChan* lrdp_chan;
	struct sync_data* item;

	while (chan_man->sync_data_list->head != NULL)
	{
		freerdp_mutex_lock(chan_man->sync_data_mutex);
		item = (struct sync_data*)list_dequeue(chan_man->sync_data_list);
		freerdp_mutex_unlock(chan_man->sync_data_mutex);

		lchan_data = chan_man->chans + item->index;
		lrdp_chan = freerdp_chanman_find_rdp_chan_by_name(chan_man, instance->settings,
			lchan_data->name, &item->index);
		if (lrdp_chan != NULL)
		{
			IFCALL(instance->SendChannelData, instance, lrdp_chan->chan_id, item->data, item->data_length);
		}
		if (lchan_data->open_event_proc != 0)
		{
			lchan_data->open_event_proc(lchan_data->open_handle,
				CHANNEL_EVENT_WRITE_COMPLETE,
				item->user_data, sizeof(void *), sizeof(void *), 0);
		}
		xfree(item);
	}
}
Beispiel #2
0
/**
 * called only from main thread
 */
static void freerdp_chanman_process_sync(rdpChanMan* chan_man, rdpInst* inst)
{
	void* ldata;
	uint32 ldata_len;
	void* luser_data;
	int lindex;
	struct chan_data* lchan_data;
	struct rdp_chan* lrdp_chan;

	if (chan_man->sync_data == NULL)
		return;

	ldata = chan_man->sync_data;
	ldata_len = chan_man->sync_data_length;
	luser_data = chan_man->sync_user_data;
	lindex = chan_man->sync_index;
	chan_man->sync_data = NULL;
	chan_man->sync_data_length = 0;
	chan_man->sync_user_data = NULL;
	chan_man->sync_index = 0;
	freerdp_sem_signal(chan_man->sync_data_sem); /* release chan_man->sync* vars */
	lchan_data = chan_man->chans + lindex;
	lrdp_chan = freerdp_chanman_find_rdp_chan_by_name(chan_man, inst->settings,
		lchan_data->name, &lindex);
	if (lrdp_chan != 0)
	{
		inst->rdp_channel_data(inst, lrdp_chan->chan_id, ldata, ldata_len);
	}
	if (lchan_data->open_event_proc != 0)
	{
		lchan_data->open_event_proc(lchan_data->open_handle,
			CHANNEL_EVENT_WRITE_COMPLETE,
			luser_data, sizeof(void *), sizeof(void *), 0);
	}
}