| From 525fa9ded72d22b53c5eb366f61e2ac1d407a2db Mon Sep 17 00:00:00 2001 |
| From: Awais Belal <awais_belal@mentor.com> |
| Date: Thu, 8 Oct 2015 13:49:31 +0500 |
| Subject: [PATCH] sharedtex_mt: fix rendering thread hang |
| |
| XNextEvent is a blocking call which locks up the display mutex |
| this causes the rendering threads to hang when they try call |
| glXSwapBuffers() as that tries to take the same mutex in |
| underlying calls through XCopyArea(). |
| So we only go to XNextEvent when it has at least one event |
| and we wouldn't lock indefinitely. |
| |
| Signed-off-by: Awais Belal <awais_belal@mentor.com> |
| Upstream-Status: Backport (2b304e765695d385fd3bf414e6e444020bedb0a8) |
| |
| --- |
| src/xdemos/sharedtex_mt.c | 9 +++++++-- |
| 1 file changed, 7 insertions(+), 2 deletions(-) |
| |
| diff --git a/src/xdemos/sharedtex_mt.c b/src/xdemos/sharedtex_mt.c |
| index a90903a..1d503c4 100644 |
| --- a/src/xdemos/sharedtex_mt.c |
| +++ b/src/xdemos/sharedtex_mt.c |
| @@ -420,9 +420,14 @@ Resize(struct window *h, unsigned int width, unsigned int height) |
| static void |
| EventLoop(void) |
| { |
| + int i; |
| + XEvent event; |
| while (1) { |
| - int i; |
| - XEvent event; |
| + /* Do we have an event? */ |
| + if (XPending(gDpy) == 0) { |
| + usleep(10000); |
| + continue; |
| + } |
| XNextEvent(gDpy, &event); |
| for (i = 0; i < NumWindows; i++) { |
| struct window *h = &Windows[i]; |
| -- |
| 1.9.1 |
| |