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); } }
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; }
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); } }
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; }