[Mesa-dev] [mesa-dev, mesa-demos][PATCH] sharedtex_mt: fix rendering thread hang

Brian Paul brianp at vmware.com
Mon Oct 12 06:31:47 PDT 2015


On 10/12/2015 05:25 AM, Belal, Awais wrote:
> Hi,
>
> Is there are a reservation against the below patch?

Looks OK, but one comment below.


> BR,
> Awais
>
> ________________________________________
> From: mesa-dev [mesa-dev-bounces at lists.freedesktop.org] on behalf of Belal, Awais
> Sent: Thursday, October 08, 2015 2:00 PM
> To: mesa-dev at lists.freedesktop.org
> Subject: [Mesa-dev] [mesa-dev,  mesa-demos][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 at mentor.com>
> ---
>   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];

Was there particular reason to move the i, event declarations?

In any case, I'll commit this in a bit.

-Brian



More information about the mesa-dev mailing list