diff libinterp/dldfcn/__init_gnuplot__.cc @ 26636:803006651db5 stable

Disallow recursion in drawnow for gnuplot toolkit (bug #55528) * graphics.cc (Fdrawnow): Revert cset 32d4ee071348. * __init_gnuplot__.cc (gnuplot_graphics_toolkit::redraw_figure): Prevent recursion for any gnuplot terminal.
author Pantxo Diribarne <pantxo.diribarne@gmail.com>
date Fri, 25 Jan 2019 16:15:54 +0100
parents 00f796120a6d
children db687716fed6
line wrap: on
line diff
--- a/libinterp/dldfcn/__init_gnuplot__.cc	Sat Jan 26 22:17:18 2019 +0100
+++ b/libinterp/dldfcn/__init_gnuplot__.cc	Fri Jan 25 16:15:54 2019 +0100
@@ -105,9 +105,19 @@
 
   void redraw_figure (const graphics_object& go) const
   {
-    octave_value_list args;
-    args(0) = go.get_handle ().as_octave_value ();
-    octave::feval ("__gnuplot_drawnow__", args);
+    static bool drawnow_executing = false;
+
+    // Prevent recursion
+    if (! drawnow_executing)
+      {
+        octave::unwind_protect frame;
+        frame.protect_var (drawnow_executing);
+
+        drawnow_executing = true;
+        octave_value_list args;
+        args(0) = go.get_handle ().as_octave_value ();
+        octave::feval ("__gnuplot_drawnow__", args);
+      }
   }
 
   void print_figure (const graphics_object& go, const std::string& term,