changeset 30760:fc530ec01070 stable

also use auto_shlib for fltk and gnuplot graphics toolkit objects * __init_fltk__.cc (fltk_graphics_toolkit::m_containing_dynamic_library): New data member. (fltk_graphics_toolkit::fltk_graphics_toolkit): Initialize it. (fltk_graphics_toolkit::~fltk_graphics_toolkit): Call m_containing_dynamic_library.delete_later to defer closing __init_flkt__.oct until after all flkt_graphics_toolkit objects have been deleted. (F__init_fltk__): Don't call interp.mlock. * __init_gnuplot__.cc (gnuplot_graphics_toolkit::m_containing_dynamic_library): New data member. (gnuplot_graphics_toolkit::gnuplot_graphics_toolkit): Initialize it. (gnuplot_graphics_toolkit::~gnuplot_graphics_toolkit): Call m_containing_dynamic_library.delete_later to defer closing __init_flkt__.oct until after all flkt_graphics_toolkit objects have been deleted. (F__init_gnuplot__): Don't call interp.mlock.
author John W. Eaton <jwe@octave.org>
date Fri, 18 Feb 2022 16:06:58 -0500
parents 25d08ca386a7
children c3d2ce86b2d8 1382d6a6e782
files libinterp/dldfcn/__init_fltk__.cc libinterp/dldfcn/__init_gnuplot__.cc
diffstat 2 files changed, 18 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/dldfcn/__init_fltk__.cc	Fri Feb 18 15:45:58 2022 -0500
+++ b/libinterp/dldfcn/__init_fltk__.cc	Fri Feb 18 16:06:58 2022 -0500
@@ -38,6 +38,7 @@
 #  include "config.h"
 #endif
 
+#include "auto-shlib.h"
 #include "defun-dld.h"
 #include "error.h"
 #include "errwarn.h"
@@ -2267,12 +2268,16 @@
 
   fltk_graphics_toolkit (octave::interpreter& interp)
     : octave::base_graphics_toolkit (FLTK_GRAPHICS_TOOLKIT_NAME),
-      m_interpreter (interp), input_event_hook_fcn_id ()
+      m_interpreter (interp), input_event_hook_fcn_id (),
+      m_containing_dynamic_library ()
   {
     Fl::visual (FL_RGB);
   }
 
-  ~fltk_graphics_toolkit (void) = default;
+  ~fltk_graphics_toolkit (void)
+  {
+    m_containing_dynamic_library.delete_later ();
+  }
 
   bool is_valid (void) const { return true; }
 
@@ -2484,6 +2489,8 @@
   octave::interpreter& m_interpreter;
 
   octave_value_list input_event_hook_fcn_id;
+
+  octave::auto_shlib m_containing_dynamic_library;
 };
 
 #endif
@@ -2523,8 +2530,6 @@
     error ("__init_fltk__: no graphics DISPLAY available");
   else if (! toolkit_loaded)
     {
-      interp.mlock ();
-
       octave::gtk_manager& gtk_mgr = interp.get_gtk_manager ();
 
       fltk_graphics_toolkit *fltk = new fltk_graphics_toolkit (interp);
--- a/libinterp/dldfcn/__init_gnuplot__.cc	Fri Feb 18 15:45:58 2022 -0500
+++ b/libinterp/dldfcn/__init_gnuplot__.cc	Fri Feb 18 16:06:58 2022 -0500
@@ -38,6 +38,7 @@
 
 #include <string>
 
+#include "auto-shlib.h"
 #include "dMatrix.h"
 #include "file-stat.h"
 #include "oct-env.h"
@@ -63,7 +64,8 @@
 {
 public:
   gnuplot_graphics_toolkit (octave::interpreter& interp)
-    : octave::base_graphics_toolkit ("gnuplot"), m_interpreter (interp)
+    : octave::base_graphics_toolkit ("gnuplot"), m_interpreter (interp),
+      m_containing_dynamic_library ()
   {
     static bool warned = false;
 
@@ -86,7 +88,10 @@
       }
   }
 
-  ~gnuplot_graphics_toolkit (void) = default;
+  ~gnuplot_graphics_toolkit (void)
+  {
+    m_containing_dynamic_library.delete_later ();
+  }
 
   bool is_valid (void) const { return true; }
 
@@ -200,6 +205,8 @@
   }
 
   octave::interpreter& m_interpreter;
+
+  octave::auto_shlib m_containing_dynamic_library;
 };
 
 static bool
@@ -262,8 +269,6 @@
 
       graphics_toolkit tk (new gnuplot_graphics_toolkit (interp));
       gtk_mgr.load_toolkit (tk);
-
-      interp.mlock ();
     }
 
   return octave_value_list ();