Summary: | XEventQueued reports 0 event when event is received | ||
---|---|---|---|
Product: | xorg | Reporter: | Yuxuan Shui <yshuiv7> |
Component: | Server/General | Assignee: | Xorg Project Team <xorg-team> |
Status: | RESOLVED MOVED | QA Contact: | Xorg Project Team <xorg-team> |
Severity: | normal | ||
Priority: | medium | CC: | yshuiv7 |
Version: | unspecified | ||
Hardware: | All | ||
OS: | Linux (All) | ||
Whiteboard: | |||
i915 platform: | i915 features: |
Description
Yuxuan Shui
2018-09-20 20:38:43 UTC
After some investigation, the problem might be in the client library. Packet capturing shows the damage event is indeed sent by the server, but not processed by the client. So I added assert(XEventsQueued(ps->dpy, QueuedAlready) == 0); before calling select() in compton. Freezes still happen, but this assert never fails. This seems to indicate a bug in Xlib. In the packets capture, I found out that X server assigned the same sequence number to a reply and an event. I think this is not supposed to happen. (In reply to Yuxuan Shui from comment #2) > In the packets capture, I found out that X server assigned the same sequence > number to a reply and an event. I think this is not supposed to happen. Sorry, this is irrelevant. Looks like, int xcb_in_read, an event is read. But then xcb_poll_event returned NULL in Xlib poll_for_event (In reply to Yuxuan Shui from comment #3) > > Looks like, int xcb_in_read, an event is read. But then xcb_poll_event > returned NULL in Xlib poll_for_event This is not true. The event is received in xcb_poll_for_reply64 (which calls xcb_in_read). At this point in Xlib poll_for_response, poll_for_event is already called and won't be tried again. Result in the event being left in xcb's queue. |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.