Exemple #1
0
static void parallel_process_irp_list(PARALLEL_DEVICE* parallel)
{
	IRP* irp;

	while (1)
	{
		if (freerdp_thread_is_stopped(parallel->thread))
			break;

		irp = (IRP*) InterlockedPopEntrySList(parallel->pIrpList);

		if (irp == NULL)
			break;

		parallel_process_irp(parallel, irp);
	}
}
Exemple #2
0
static void* parallel_thread_func(void* arg)
{
	IRP* irp;
	wMessage message;
	PARALLEL_DEVICE* parallel = (PARALLEL_DEVICE*) arg;
	UINT error = CHANNEL_RC_OK;
	freerdp_channel_init_thread_context(parallel->rdpcontext);

	while (1)
	{
		if (!MessageQueue_Wait(parallel->queue))
		{
			WLog_ERR(TAG, "MessageQueue_Wait failed!");
			error = ERROR_INTERNAL_ERROR;
			break;
		}

		if (!MessageQueue_Peek(parallel->queue, &message, TRUE))
		{
			WLog_ERR(TAG, "MessageQueue_Peek failed!");
			error = ERROR_INTERNAL_ERROR;
			break;
		}

		if (message.id == WMQ_QUIT)
			break;

		irp = (IRP*) message.wParam;

		if ((error = parallel_process_irp(parallel, irp)))
		{
			WLog_ERR(TAG, "parallel_process_irp failed with error %d!", error);
			break;
		}
	}

	if (error && parallel->rdpcontext)
		setChannelError(parallel->rdpcontext, error,
		                "parallel_thread_func reported an error");

	ExitThread((DWORD)error);
	return NULL;
}
Exemple #3
0
static void parallel_process_irp_list(PARALLEL_DEVICE* parallel)
{
    IRP* irp;

    while (1)
    {
        if (freerdp_thread_is_stopped(parallel->thread))
            break;

        freerdp_thread_lock(parallel->thread);
        irp = (IRP*) list_dequeue(parallel->irp_list);
        freerdp_thread_unlock(parallel->thread);

        if (irp == NULL)
            break;

        parallel_process_irp(parallel, irp);
    }
}
Exemple #4
0
static void* parallel_thread_func(void* arg)
{
	IRP* irp;
	wMessage message;
	PARALLEL_DEVICE* parallel = (PARALLEL_DEVICE*) arg;

	while (1)
	{
		if (!MessageQueue_Wait(parallel->queue))
			break;

		if (!MessageQueue_Peek(parallel->queue, &message, TRUE))
			break;

		if (message.id == WMQ_QUIT)
			break;

		irp = (IRP*) message.wParam;

		parallel_process_irp(parallel, irp);
	}

	return NULL;
}