gl: Drop draw device upon exception rendering page contents/annots/widgets.
authorSebastian Rasmussen <[email protected]>
Thu, 9 Mar 2023 13:42:17 +0000 (14:42 +0100)
committerSebastian Rasmussen <[email protected]>
Thu, 9 Mar 2023 13:42:22 +0000 (14:42 +0100)
platform/gl/gl-main.c

index d6d5b0e842f9378ac1279641a5d495bdbefc9b4a..3e361fe59bb2009a388630142f1abaa9e494bccb 100644 (file)
@@ -984,18 +984,31 @@ static void render_page(void)
                fz_clear_pixmap(ctx, page_contents);
 
                dev = fz_new_draw_device(ctx, draw_page_ctm, page_contents);
-               fz_run_page_contents(ctx, fzpage, dev, fz_identity, NULL);
-               fz_close_device(ctx, dev);
-               fz_drop_device(ctx, dev);
+
+               fz_try(ctx)
+               {
+                       fz_run_page_contents(ctx, fzpage, dev, fz_identity, NULL);
+                       fz_close_device(ctx, dev);
+               }
+               fz_always(ctx)
+                       fz_drop_device(ctx, dev);
+               fz_catch(ctx)
+                       fz_rethrow(ctx);
        }
 
        pix = fz_clone_pixmap_area_with_different_seps(ctx, page_contents, NULL, fz_device_rgb(ctx), NULL, fz_default_color_params, NULL);
        {
                dev = fz_new_draw_device(ctx, draw_page_ctm, pix);
-               fz_run_page_annots(ctx, fzpage, dev, fz_identity, NULL);
-               fz_run_page_widgets(ctx, fzpage, dev, fz_identity, NULL);
-               fz_close_device(ctx, dev);
-               fz_drop_device(ctx, dev);
+               fz_try(ctx)
+               {
+                       fz_run_page_annots(ctx, fzpage, dev, fz_identity, NULL);
+                       fz_run_page_widgets(ctx, fzpage, dev, fz_identity, NULL);
+                       fz_close_device(ctx, dev);
+               }
+               fz_always(ctx)
+                       fz_drop_device(ctx, dev);
+               fz_catch(ctx)
+                       fz_rethrow(ctx);
        }
 
        if (currentinvert)