Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP5:GA
libX11.26493
U_0004-poll_for_event-Allow-using-xcb_poll_for_...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File U_0004-poll_for_event-Allow-using-xcb_poll_for_queued_event.patch of Package libX11.26493
From 823a0f8a820247b6c1e092f679b49cbdc2ea5c95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel.daenzer@amd.com> Date: Fri, 28 Sep 2018 17:24:17 +0200 Subject: [PATCH 4/6] poll_for_event: Allow using xcb_poll_for_queued_event It avoids reading from the display connection again in cases where that was already done. Suggested-by: Uli Schlachter <psychon@znc.in> Reviewed-by: Uli Schlachter <psychon@znc.in> --- src/xcb_io.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/xcb_io.c b/src/xcb_io.c index a32b7d75..6a12d150 100644 --- a/src/xcb_io.c +++ b/src/xcb_io.c @@ -230,7 +230,7 @@ static void widen(uint64_t *wide, unsigned int narrow) * variable for that thread to process the response and wake us up. */ -static xcb_generic_reply_t *poll_for_event(Display *dpy) +static xcb_generic_reply_t *poll_for_event(Display *dpy, Bool queued_only) { /* Make sure the Display's sequence numbers are valid */ require_socket(dpy); @@ -238,8 +238,12 @@ static xcb_generic_reply_t *poll_for_event(Display *dpy) /* Precondition: This thread can safely get events from XCB. */ assert(dpy->xcb->event_owner == XlibOwnsEventQueue && !dpy->xcb->event_waiter); - if(!dpy->xcb->next_event) - dpy->xcb->next_event = xcb_poll_for_event(dpy->xcb->connection); + if(!dpy->xcb->next_event) { + if(queued_only) + dpy->xcb->next_event = xcb_poll_for_queued_event(dpy->xcb->connection); + else + dpy->xcb->next_event = xcb_poll_for_event(dpy->xcb->connection); + } if(dpy->xcb->next_event) { @@ -271,7 +275,7 @@ static xcb_generic_reply_t *poll_for_response(Display *dpy) void *response; xcb_generic_error_t *error; PendingRequest *req; - while(!(response = poll_for_event(dpy)) && + while(!(response = poll_for_event(dpy, False)) && (req = dpy->xcb->pending_requests) && !req->reply_waiter) { @@ -281,7 +285,7 @@ static xcb_generic_reply_t *poll_for_response(Display *dpy) &response, &error)) { /* xcb_poll_for_reply64 may have read events even if * there is no reply. */ - response = poll_for_event(dpy); + response = poll_for_event(dpy, True); break; } @@ -626,7 +630,7 @@ Status _XReply(Display *dpy, xReply *rep, int extra, Bool discard) { /* need braces around ConditionWait */ ConditionWait(dpy, dpy->xcb->event_notify); } - while((event = poll_for_event(dpy))) + while((event = poll_for_event(dpy, True))) handle_response(dpy, event, True); } -- 2.16.4
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor