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:
parent
772ca6f99d
commit
2642bda7d1
@ -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)--;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user