static void* remdesk_virtual_channel_client_thread(void* arg) { wStream* data; wMessage message; remdeskPlugin* remdesk = (remdeskPlugin*) arg; remdesk_process_connect(remdesk); while (1) { if (!MessageQueue_Wait(remdesk->MsgPipe->In)) break; if (MessageQueue_Peek(remdesk->MsgPipe->In, &message, TRUE)) { if (message.id == WMQ_QUIT) break; if (message.id == 0) { data = (wStream*) message.wParam; remdesk_process_receive(remdesk, data); } } } ExitThread(0); return NULL; }
static void* remdesk_virtual_channel_client_thread(void* arg) { wStream* data; wMessage message; remdeskPlugin* remdesk = (remdeskPlugin*) arg; UINT error = CHANNEL_RC_OK; freerdp_channel_init_thread_context(remdesk->rdpcontext); remdesk_process_connect(remdesk); while (1) { if (!MessageQueue_Wait(remdesk->queue)) { WLog_ERR(TAG, "MessageQueue_Wait failed!"); error = ERROR_INTERNAL_ERROR; break; } if (!MessageQueue_Peek(remdesk->queue, &message, TRUE)) { WLog_ERR(TAG, "MessageQueue_Peek failed!"); error = ERROR_INTERNAL_ERROR; break; } if (message.id == WMQ_QUIT) break; if (message.id == 0) { data = (wStream*) message.wParam; if ((error = remdesk_process_receive(remdesk, data))) { WLog_ERR(TAG, "remdesk_process_receive failed with error %lu!", error); break; } } } if (error && remdesk->rdpcontext) setChannelError(remdesk->rdpcontext, error, "remdesk_virtual_channel_client_thread reported an error"); ExitThread((DWORD)error); return NULL; }