xfreerdp-server: Fixed issue with high idle CPU usage.

The pipe used for signalling in the event queue was not properly
cleared when popping events, causing the select() in the main
loop to return immediately after the first event was queued,
instead of blocking for the next event.
This commit is contained in:
Asbjørn Heid 2012-02-11 06:24:32 +01:00
parent 772ca6f99d
commit 2642bda7d1

View File

@ -61,7 +61,7 @@ void xf_set_event(xfEventQueue* event_queue)
printf("xf_set_event: error\n");
}
void xf_clear_event(xfEventQueue* event_queue)
void xf_clear_events(xfEventQueue* event_queue)
{
int length;
@ -74,6 +74,16 @@ void xf_clear_event(xfEventQueue* event_queue)
}
}
void xf_clear_event(xfEventQueue* event_queue)
{
int length;
length = read(event_queue->pipe_fd[0], &length, 4);
if (length != 4)
printf("xf_clear_event: error\n");
}
void xf_event_push(xfEventQueue* event_queue, xfEvent* event)
{
pthread_mutex_lock(&(event_queue->mutex));
@ -116,6 +126,9 @@ xfEvent* xf_event_pop(xfEventQueue* event_queue)
if (event_queue->count < 1)
return NULL;
/* remove event signal */
xf_clear_event(event_queue);
event = event_queue->events[0];
(event_queue->count)--;