st/dri: add null-pointer check, remove duplicated local variable
authorMarek Olšák <maraeo@gmail.com>
Mon, 21 Jan 2013 14:48:55 +0000 (15:48 +0100)
committerMarek Olšák <maraeo@gmail.com>
Thu, 24 Jan 2013 17:22:14 +0000 (18:22 +0100)
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/state_trackers/dri/common/dri_drawable.c

index 2ea54781d17f45615f7d4dc7a82d091c83bffd09..d817a8c217898d39b230101f1978e21cc099af62 100644 (file)
@@ -446,6 +446,7 @@ dri_flush(__DRIcontext *cPriv,
 
    /* Flush the context and throttle if needed. */
    if (dri_screen(ctx->sPriv)->throttling_enabled &&
+       drawable &&
        (reason == __DRI2_THROTTLE_SWAPBUFFER ||
         reason == __DRI2_THROTTLE_FLUSHFRONT)) {
       /* Throttle.
@@ -458,19 +459,19 @@ dri_flush(__DRIcontext *cPriv,
        * pushes that fence on the queue. This requires that the st_context_iface
        * flush method returns a fence even if there are no commands to flush.
        */
-      struct dri_drawable *draw = dri_drawable(dPriv);
-      struct pipe_screen *screen = draw->screen->base.screen;
+      struct pipe_screen *screen = drawable->screen->base.screen;
       struct pipe_fence_handle *fence;
 
-      fence = swap_fences_pop_front(draw);
+      fence = swap_fences_pop_front(drawable);
       if (fence) {
          (void) screen->fence_finish(screen, fence, PIPE_TIMEOUT_INFINITE);
          screen->fence_reference(screen, &fence, NULL);
       }
 
       ctx->st->flush(ctx->st, flush_flags, &fence);
+
       if (fence) {
-         swap_fences_push_back(draw, fence);
+         swap_fences_push_back(drawable, fence);
          screen->fence_reference(screen, &fence, NULL);
       }
    }