libfreerdp-utils: purge deprecated wait_obj utils

This commit is contained in:
Marc-André Moreau 2012-11-26 20:15:48 -05:00
parent 75a5b755fe
commit eea3414579
19 changed files with 124 additions and 207 deletions

View File

@ -30,7 +30,6 @@
#include <freerdp/utils/dsp.h>
#include <freerdp/utils/thread.h>
#include <freerdp/utils/stream.h>
#include <freerdp/utils/wait_obj.h>
#include <freerdp/channels/wtsvc.h>
#include <freerdp/server/audin.h>
@ -278,20 +277,25 @@ static void* audin_server_thread_func(void* arg)
{
fd = *((void**) buffer);
WTSFreeMemory(buffer);
thread->signals[thread->num_signals++] = wait_obj_new_with_fd(fd);
thread->signals[thread->num_signals++] = CreateFileDescriptorEvent(NULL, TRUE, FALSE, ((int) (long) fd));
}
/* Wait for the client to confirm that the Audio Input dynamic channel is ready */
while (1)
{
freerdp_thread_wait(thread);
if (freerdp_thread_is_stopped(thread))
break;
if (WTSVirtualChannelQuery(audin->audin_channel, WTSVirtualChannelReady, &buffer, &bytes_returned) == FALSE)
break;
ready = *((BOOL*) buffer);
WTSFreeMemory(buffer);
if (ready)
break;
}

View File

@ -35,7 +35,6 @@
#include <freerdp/channels/channels.h>
#include <freerdp/svc.h>
#include <freerdp/addin.h>
#include <freerdp/utils/wait_obj.h>
#include <freerdp/utils/file.h>
#include <freerdp/utils/event.h>
#include <freerdp/utils/debug.h>
@ -840,7 +839,7 @@ static UINT32 FREERDP_CC MyVirtualChannelWrite(UINT32 openHandle, void* pData, U
InterlockedPushEntrySList(channels->pSyncDataList, &(item->ItemEntry));
/* set the event */
wait_obj_set(channels->signal);
SetEvent(channels->signal);
return CHANNEL_RC_OK;
}
@ -891,7 +890,7 @@ static UINT32 FREERDP_CC MyVirtualChannelEventPush(UINT32 openHandle, RDP_EVENT*
channels->event = event;
/* set the event */
wait_obj_set(channels->signal);
SetEvent(channels->signal);
return CHANNEL_RC_OK;
}
@ -935,7 +934,7 @@ rdpChannels* freerdp_channels_new(void)
InitializeSListHead(channels->pSyncDataList);
channels->event_sem = CreateSemaphore(NULL, 1, 16, NULL);
channels->signal = wait_obj_new();
channels->signal = CreateEvent(NULL, TRUE, FALSE, NULL);
/* Add it to the global list */
channels_list = (rdpChannelsList*) malloc(sizeof(rdpChannelsList));
@ -959,7 +958,7 @@ void freerdp_channels_free(rdpChannels* channels)
_aligned_free(channels->pSyncDataList);
CloseHandle(channels->event_sem);
wait_obj_free(channels->signal);
CloseHandle(channels->signal);
/* Remove from global list */
@ -1266,7 +1265,16 @@ static void freerdp_channels_process_sync(rdpChannels* channels, freerdp* instan
BOOL freerdp_channels_get_fds(rdpChannels* channels, freerdp* instance, void** read_fds,
int* read_count, void** write_fds, int* write_count)
{
wait_obj_get_fds(channels->signal, read_fds, read_count);
int fd;
fd = GetEventFileDescriptor(channels->signal);
if (fd != -1)
{
read_fds[*read_count] = ((void*) (long) fd);
(*read_count)++;
}
return TRUE;
}
@ -1275,9 +1283,9 @@ BOOL freerdp_channels_get_fds(rdpChannels* channels, freerdp* instance, void** r
*/
BOOL freerdp_channels_check_fds(rdpChannels* channels, freerdp* instance)
{
if (wait_obj_is_set(channels->signal))
if (WaitForSingleObject(channels->signal, 0) == WAIT_OBJECT_0)
{
wait_obj_clear(channels->signal);
ResetEvent(channels->signal);
freerdp_channels_process_sync(channels, instance);
}

View File

@ -29,7 +29,6 @@
#include <freerdp/constants.h>
#include <freerdp/utils/stream.h>
#include <freerdp/utils/wait_obj.h>
#include <freerdp/utils/svc_plugin.h>
#include "dvcman.h"

View File

@ -30,7 +30,6 @@
#include <freerdp/utils/dsp.h>
#include <freerdp/utils/stream.h>
#include <freerdp/utils/thread.h>
#include <freerdp/utils/wait_obj.h>
#include <freerdp/channels/wtsvc.h>
#include <freerdp/server/rdpsnd.h>
@ -175,7 +174,8 @@ static void* rdpsnd_server_thread_func(void* arg)
{
fd = *((void**) buffer);
WTSFreeMemory(buffer);
thread->signals[thread->num_signals++] = wait_obj_new_with_fd(fd);
thread->signals[thread->num_signals++] = CreateFileDescriptorEvent(NULL, TRUE, FALSE, ((int) (long) fd));
}
s = stream_new(4096);

View File

@ -47,7 +47,6 @@
#include <freerdp/utils/stream.h>
#include <freerdp/utils/thread.h>
#include <freerdp/utils/unicode.h>
#include <freerdp/utils/wait_obj.h>
#include <freerdp/channels/rdpdr.h>
typedef struct _SERIAL_DEVICE SERIAL_DEVICE;
@ -351,10 +350,10 @@ static void* serial_thread_func(void* arg)
freerdp_thread_reset(serial->thread);
serial_process_irp_list(serial);
if (wait_obj_is_set(serial->in_event))
if (WaitForSingleObject(serial->in_event, 0) == WAIT_OBJECT_0)
{
if (serial_check_fds(serial))
wait_obj_clear(serial->in_event);
ResetEvent(serial->in_event);
}
}
@ -442,7 +441,7 @@ static void serial_abort_single_io(SERIAL_DEVICE* serial, UINT32 file_id, UINT32
stream_write_UINT32(irp->output, 0);
irp->Complete(irp);
wait_obj_set(serial->in_event);
SetEvent(serial->in_event);
break;
}
@ -480,7 +479,7 @@ static void serial_check_for_events(SERIAL_DEVICE* serial)
irp = (IRP*) list_next(serial->pending_irps, irp);
list_remove(serial->pending_irps, prev);
wait_obj_set(serial->in_event);
SetEvent(serial->in_event);
}
}
@ -556,7 +555,7 @@ static void serial_handle_async_irp(SERIAL_DEVICE* serial, IRP* irp)
irp->IoStatus = STATUS_PENDING;
list_enqueue(serial->pending_irps, irp);
wait_obj_set(serial->in_event);
SetEvent(serial->in_event);
}
static void __serial_check_fds(SERIAL_DEVICE* serial)
@ -616,7 +615,7 @@ static void __serial_check_fds(SERIAL_DEVICE* serial)
if (prev->IoStatus == STATUS_SUCCESS)
{
list_remove(serial->pending_irps, prev);
wait_obj_set(serial->in_event);
SetEvent(serial->in_event);
}
}
}
@ -726,7 +725,7 @@ int DeviceServiceEntry(PDEVICE_SERVICE_ENTRY_POINTS pEntryPoints)
serial->irp_list = list_new();
serial->pending_irps = list_new();
serial->thread = freerdp_thread_new();
serial->in_event = wait_obj_new();
serial->in_event = CreateEvent(NULL, TRUE, FALSE, NULL);
pEntryPoints->RegisterDevice(pEntryPoints->devman, (DEVICE*) serial);

View File

@ -110,7 +110,7 @@ static void wts_queue_receive_data(rdpPeerChannel* channel, const BYTE* buffer,
list_enqueue(channel->receive_queue, item);
ReleaseMutex(channel->mutex);
wait_obj_set(channel->receive_event);
SetEvent(channel->receive_event);
}
static void wts_queue_send_item(rdpPeerChannel* channel, wts_data_item* item)
@ -125,7 +125,7 @@ static void wts_queue_send_item(rdpPeerChannel* channel, wts_data_item* item)
list_enqueue(vcm->send_queue, item);
ReleaseMutex(vcm->mutex);
wait_obj_set(vcm->send_event);
SetEvent(vcm->send_event);
}
static int wts_read_variable_uint(STREAM* s, int cbLen, UINT32 *val)
@ -184,7 +184,8 @@ static void wts_read_drdynvc_create_response(rdpPeerChannel* channel, STREAM* s,
DEBUG_DVC("ChannelId %d creation succeeded", channel->channel_id);
channel->dvc_open_state = DVC_OPEN_STATE_SUCCEEDED;
}
wait_obj_set(channel->receive_event);
SetEvent(channel->receive_event);
}
static void wts_read_drdynvc_data_first(rdpPeerChannel* channel, STREAM* s, int cbLen, UINT32 length)
@ -420,7 +421,7 @@ WTSVirtualChannelManager* WTSCreateVirtualChannelManager(freerdp_peer* client)
ZeroMemory(vcm, sizeof(WTSVirtualChannelManager));
vcm->client = client;
vcm->send_event = wait_obj_new();
vcm->send_event = CreateEvent(NULL, TRUE, FALSE, NULL);
vcm->send_queue = list_new();
vcm->mutex = CreateMutex(NULL, FALSE, NULL);
vcm->dvc_channel_id_seq = 1;
@ -452,7 +453,7 @@ void WTSDestroyVirtualChannelManager(WTSVirtualChannelManager* vcm)
vcm->drdynvc_channel = NULL;
}
wait_obj_free(vcm->send_event);
CloseHandle(vcm->send_event);
while ((item = (wts_data_item*) list_dequeue(vcm->send_queue)) != NULL)
{
@ -468,11 +469,25 @@ void WTSDestroyVirtualChannelManager(WTSVirtualChannelManager* vcm)
void WTSVirtualChannelManagerGetFileDescriptor(WTSVirtualChannelManager* vcm,
void** fds, int* fds_count)
{
wait_obj_get_fds(vcm->send_event, fds, fds_count);
int fd;
fd = GetEventFileDescriptor(vcm->send_event);
if (fd != -1)
{
fds[*fds_count] = ((void*) (long) fd);
(*fds_count)++;
}
if (vcm->drdynvc_channel)
{
wait_obj_get_fds(vcm->drdynvc_channel->receive_event, fds, fds_count);
fd = GetEventFileDescriptor(vcm->drdynvc_channel->receive_event);
if (fd != -1)
{
fds[*fds_count] = ((void*) (long) fd);
(*fds_count)++;
}
}
}
@ -498,7 +513,7 @@ BOOL WTSVirtualChannelManagerCheckFileDescriptor(WTSVirtualChannelManager* vcm)
}
}
wait_obj_clear(vcm->send_event);
ResetEvent(vcm->send_event);
WaitForSingleObject(vcm->mutex, INFINITE);
@ -546,7 +561,7 @@ void* WTSVirtualChannelOpenEx(
channel->client = client;
channel->channel_type = RDP_PEER_CHANNEL_TYPE_DVC;
channel->receive_data = stream_new(client->settings->VirtualChannelChunkSize);
channel->receive_event = wait_obj_new();
channel->receive_event = CreateEvent(NULL, TRUE, FALSE, NULL);
channel->receive_queue = list_new();
channel->mutex = CreateMutex(NULL, FALSE, NULL);
@ -594,7 +609,7 @@ void* WTSVirtualChannelOpenEx(
channel->index = i;
channel->channel_type = RDP_PEER_CHANNEL_TYPE_SVC;
channel->receive_data = stream_new(client->settings->VirtualChannelChunkSize);
channel->receive_event = wait_obj_new();
channel->receive_event = CreateEvent(NULL, TRUE, FALSE, NULL);
channel->receive_queue = list_new();
channel->mutex = CreateMutex(NULL, FALSE, NULL);
@ -611,6 +626,7 @@ BOOL WTSVirtualChannelQuery(
/* __out */ void** ppBuffer,
/* __out */ UINT32* pBytesReturned)
{
int fd;
BOOL bval;
void* fds[10];
int fds_count = 0;
@ -620,7 +636,15 @@ BOOL WTSVirtualChannelQuery(
switch (WtsVirtualClass)
{
case WTSVirtualFileHandle:
wait_obj_get_fds(channel->receive_event, fds, &fds_count);
fd = GetEventFileDescriptor(channel->receive_event);
if (fd != -1)
{
fds[fds_count] = ((void*) (long) fd);
(fds_count)++;
}
*ppBuffer = malloc(sizeof(void*));
memcpy(*ppBuffer, &fds[0], sizeof(void*));
*pBytesReturned = sizeof(void*);
@ -682,7 +706,7 @@ BOOL WTSVirtualChannelRead(
if (item == NULL)
{
wait_obj_clear(channel->receive_event);
ResetEvent(channel->receive_event);
*pBytesRead = 0;
return TRUE;
}
@ -697,7 +721,7 @@ BOOL WTSVirtualChannelRead(
list_dequeue(channel->receive_queue);
if (list_size(channel->receive_queue) == 0)
wait_obj_clear(channel->receive_event);
ResetEvent(channel->receive_event);
ReleaseMutex(channel->mutex);
@ -825,7 +849,7 @@ BOOL WTSVirtualChannelClose(
stream_free(channel->receive_data);
if (channel->receive_event)
wait_obj_free(channel->receive_event);
CloseHandle(channel->receive_event);
if (channel->receive_queue)
{

View File

@ -25,7 +25,6 @@
#include <freerdp/utils/stream.h>
#include <freerdp/utils/list.h>
#include <freerdp/utils/debug.h>
#include <freerdp/utils/wait_obj.h>
#include <freerdp/channels/wtsvc.h>
#include <winpr/synch.h>

View File

@ -144,7 +144,7 @@ static void searchman_start(USB_SEARCHMAN* self, void* func)
/* close thread */
static void searchman_close(USB_SEARCHMAN* self)
{
wait_obj_set(self->term_event);
SetEvent(self->term_event);
}
static void searchman_list_show(USB_SEARCHMAN* self)
@ -176,7 +176,7 @@ void searchman_free(USB_SEARCHMAN* self)
/* free searchman */
sem_destroy(&self->sem_term);
wait_obj_free(self->term_event);
CloseHandle(self->term_event);
free(self);
}
@ -214,7 +214,7 @@ USB_SEARCHMAN* searchman_new(void * urbdrc, UINT32 UsbDevice)
searchman->free = searchman_free;
searchman->strated = 0;
searchman->term_event = wait_obj_new();
searchman->term_event = CreateEvent(NULL, TRUE, FALSE, NULL);
sem_init(&searchman->sem_term, 0, 0);
return searchman;

View File

@ -22,9 +22,9 @@
#define __SEACH_MAN_H
#include "urbdrc_types.h"
#include <freerdp/utils/wait_obj.h>
typedef struct _USB_SEARCHDEV USB_SEARCHDEV;
struct _USB_SEARCHDEV
{
void* inode;
@ -35,6 +35,7 @@ struct _USB_SEARCHDEV
};
typedef struct _USB_SEARCHMAN USB_SEARCHMAN;
struct _USB_SEARCHMAN
{
int usb_numbers;

View File

@ -26,6 +26,7 @@
#include <libudev.h>
#include <winpr/crt.h>
#include <winpr/synch.h>
#include <winpr/cmdline.h>
#include <freerdp/dvc.h>
@ -474,7 +475,7 @@ static void* urbdrc_search_usb_device(void* arg)
/* Get the file descriptor (fd) for the monitor.
This fd will get passed to select() */
mon_fd = wait_obj_new_with_fd((void*) (size_t) udev_monitor_get_fd(mon));
mon_fd = CreateFileDescriptorEvent(NULL, TRUE, FALSE, udev_monitor_get_fd(mon));
while (1)
{
@ -488,15 +489,16 @@ static void* urbdrc_search_usb_device(void* arg)
listobj[0] = searchman->term_event;
listobj[1] = mon_fd;
numobj = 2;
wait_obj_select(listobj, numobj, -1);
if (wait_obj_is_set(searchman->term_event))
WaitForMultipleObjects(numobj, listobj, FALSE, INFINITE);
if (WaitForSingleObject(searchman->term_event, 0) == WAIT_OBJECT_0)
{
sem_post(&searchman->sem_term);
return 0;
}
if (wait_obj_is_set(mon_fd))
if (WaitForSingleObject(mon_fd, 0) == WAIT_OBJECT_0)
{
dev = udev_monitor_receive_device(mon);
@ -570,11 +572,11 @@ static void* urbdrc_search_usb_device(void* arg)
numobj = 1;
timeout = 4000; /* milliseconds */
wait_obj_select(listobj, numobj, timeout);
WaitForMultipleObjects(numobj, listobj, FALSE, timeout);
if (wait_obj_is_set(searchman->term_event))
if (WaitForSingleObject(searchman->term_event, 0) == WAIT_OBJECT_0)
{
wait_obj_free(mon_fd);
CloseHandle(mon_fd);
sem_post(&searchman->sem_term);
return 0;
}
@ -626,11 +628,11 @@ static void* urbdrc_search_usb_device(void* arg)
numobj = 1;
timeout = 3000; /* milliseconds */
wait_obj_select(listobj, numobj, timeout);
WaitForMultipleObjects(numobj, listobj, FALSE, timeout);
if (wait_obj_is_set(searchman->term_event))
if (WaitForSingleObject(searchman->term_event, 0) == WAIT_OBJECT_0)
{
wait_obj_free(mon_fd);
CloseHandle(mon_fd);
sem_post(&searchman->sem_term);
return 0;
}
@ -644,13 +646,14 @@ static void* urbdrc_search_usb_device(void* arg)
udev_device_unref(dev);
}
else {
else
{
printf("No Device from receive_device(). An error occured.\n");
}
}
}
wait_obj_free(mon_fd);
CloseHandle(mon_fd);
sem_post(&searchman->sem_term);
return 0;

View File

@ -1,34 +0,0 @@
/**
* FreeRDP: A Remote Desktop Protocol Implementation
* Virtual Channel Manager
*
* Copyright 2009-2011 Jay Sorg
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __WAIT_OBJ_UTILS
#define __WAIT_OBJ_UTILS
#include <freerdp/api.h>
FREERDP_API HANDLE wait_obj_new(void);
FREERDP_API HANDLE wait_obj_new_with_fd(void* fd);
FREERDP_API void wait_obj_free(HANDLE event);
FREERDP_API int wait_obj_is_set(HANDLE event);
FREERDP_API void wait_obj_set(HANDLE event);
FREERDP_API void wait_obj_clear(HANDLE event);
FREERDP_API int wait_obj_select(HANDLE* events, int count, int timeout);
FREERDP_API void wait_obj_get_fds(HANDLE event, void** fds, int* count);
#endif

View File

@ -36,7 +36,6 @@ typedef struct rdp_ntlm_http rdpNtlmHttp;
#include <freerdp/settings.h>
#include <freerdp/crypto/tls.h>
#include <freerdp/crypto/crypto.h>
#include <freerdp/utils/wait_obj.h>
#include <freerdp/utils/sleep.h>
#include <freerdp/utils/debug.h>
#include <freerdp/utils/stream.h>

View File

@ -61,7 +61,6 @@ typedef struct
#include <freerdp/settings.h>
#include <freerdp/crypto/tls.h>
#include <freerdp/crypto/crypto.h>
#include <freerdp/utils/wait_obj.h>
#include <freerdp/utils/sleep.h>
#include <freerdp/utils/debug.h>
#include <freerdp/utils/stream.h>

View File

@ -26,6 +26,7 @@
#include <string.h>
#include <winpr/crt.h>
#include <winpr/synch.h>
#include <freerdp/utils/tcp.h>
#include <freerdp/utils/sleep.h>
@ -354,7 +355,7 @@ int transport_write(rdpTransport* transport, STREAM* s)
{
/* and in case we do have buffered some data, we set the event so next loop will get it */
if (transport_read_nonblocking(transport) > 0)
wait_obj_set(transport->recv_event);
SetEvent(transport->recv_event);
}
}
@ -373,6 +374,8 @@ int transport_write(rdpTransport* transport, STREAM* s)
void transport_get_fds(rdpTransport* transport, void** rfds, int* rcount)
{
int fd;
#ifdef _WIN32
rfds[*rcount] = transport->TcpIn->wsa_event;
(*rcount)++;
@ -392,7 +395,14 @@ void transport_get_fds(rdpTransport* transport, void** rfds, int* rcount)
(*rcount)++;
}
#endif
wait_obj_get_fds(transport->recv_event, rfds, rcount);
fd = GetEventFileDescriptor(transport->recv_event);
if (fd != -1)
{
rfds[*rcount] = ((void*) (long) fd);
(*rcount)++;
}
}
int transport_check_fds(rdpTransport** ptransport)
@ -406,7 +416,7 @@ int transport_check_fds(rdpTransport** ptransport)
#ifdef _WIN32
WSAResetEvent(transport->TcpIn->wsa_event);
#endif
wait_obj_clear(transport->recv_event);
ResetEvent(transport->recv_event);
status = transport_read_nonblocking(transport);
@ -496,7 +506,7 @@ int transport_check_fds(rdpTransport** ptransport)
/* one at a time but set event if data buffered
* so the main loop will call freerdp_check_fds asap */
if (stream_get_pos(transport->recv_buffer) > 0)
wait_obj_set(transport->recv_event);
SetEvent(transport->recv_event);
break;
}
@ -529,7 +539,7 @@ rdpTransport* transport_new(rdpSettings* settings)
/* receive buffer for non-blocking read. */
transport->recv_buffer = stream_new(BUFFER_SIZE);
transport->recv_event = wait_obj_new();
transport->recv_event = CreateEvent(NULL, TRUE, FALSE, NULL);
/* buffers for blocking read/write */
transport->recv_stream = stream_new(BUFFER_SIZE);
@ -550,7 +560,7 @@ void transport_free(rdpTransport* transport)
stream_free(transport->recv_buffer);
stream_free(transport->recv_stream);
stream_free(transport->send_stream);
wait_obj_free(transport->recv_event);
CloseHandle(transport->recv_event);
if (transport->TlsIn)
tls_free(transport->TlsIn);

View File

@ -41,7 +41,6 @@ typedef struct rdp_transport rdpTransport;
#include <freerdp/types.h>
#include <freerdp/settings.h>
#include <freerdp/utils/stream.h>
#include <freerdp/utils/wait_obj.h>
typedef BOOL (*TransportRecv) (rdpTransport* transport, STREAM* stream, void* extra);

View File

@ -36,7 +36,6 @@ typedef struct rdp_tsg rdpTsg;
#include <freerdp/types.h>
#include <freerdp/settings.h>
#include <freerdp/utils/stream.h>
#include <freerdp/utils/wait_obj.h>
#include <freerdp/utils/debug.h>
enum _TSG_STATE

View File

@ -39,8 +39,7 @@ set(${MODULE_PREFIX}_SRCS
thread.c
time.c
uds.c
unicode.c
wait_obj.c)
unicode.c)
if(NOT WIN32)
set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} msusb.c)

View File

@ -1,92 +0,0 @@
/**
* FreeRDP: A Remote Desktop Protocol Implementation
* Virtual Channel Manager
*
* Copyright 2009-2011 Jay Sorg
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winpr/crt.h>
#include <winpr/synch.h>
#include <winpr/windows.h>
#include <freerdp/utils/wait_obj.h>
#ifndef _WIN32
#include <sys/time.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
HANDLE wait_obj_new(void)
{
return CreateEvent(NULL, TRUE, FALSE, NULL);
}
HANDLE wait_obj_new_with_fd(void* fd)
{
return CreateFileDescriptorEvent(NULL, TRUE, FALSE, ((int) (long) fd));
}
void wait_obj_free(HANDLE event)
{
CloseHandle(event);
}
int wait_obj_is_set(HANDLE event)
{
return (WaitForSingleObject(event, 0) == WAIT_OBJECT_0);
}
void wait_obj_set(HANDLE event)
{
SetEvent(event);
}
void wait_obj_clear(HANDLE event)
{
ResetEvent(event);
}
int wait_obj_select(HANDLE* events, int count, int timeout)
{
if (WaitForMultipleObjects(count, events, FALSE, timeout) == WAIT_FAILED)
return -1;
return 0;
}
void wait_obj_get_fds(HANDLE event, void** fds, int* count)
{
int fd;
fd = GetEventFileDescriptor(event);
if (fd == -1)
return;
fds[*count] = ((void*) (long) fd);
(*count)++;
}

View File

@ -31,6 +31,7 @@
#include <sys/time.h>
#include <winpr/crt.h>
#include <winpr/synch.h>
#include <freerdp/constants.h>
#include <freerdp/utils/sleep.h>
@ -408,7 +409,7 @@ static void* tf_debug_channel_thread_func(void* arg)
{
fd = *((void**) buffer);
WTSFreeMemory(buffer);
thread->signals[thread->num_signals++] = wait_obj_new_with_fd(fd);
thread->signals[thread->num_signals++] = CreateFileDescriptorEvent(NULL, TRUE, FALSE, ((int) (long) fd));
}
s = stream_new(4096);