changeset 30761:c3d2ce86b2d8

maint: Merge stable to default.
author John W. Eaton <jwe@octave.org>
date Fri, 18 Feb 2022 16:08:58 -0500
parents 89cd6ae42bb9 (current diff) fc530ec01070 (diff)
children 61673150d947
files libinterp/dldfcn/__init_fltk__.cc
diffstat 3 files changed, 28 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/examples/code/make_int.cc	Fri Feb 18 19:26:24 2022 +0100
+++ b/examples/code/make_int.cc	Fri Feb 18 16:08:58 2022 -0500
@@ -26,19 +26,25 @@
 
 // Integer values.
 
+// Derive from octave_base_dld_value instead of octave_base_value
+// so that octave_integer values created by that dynamically loaded
+// make_int.oct file will be tracked automatically and the .oct file
+// will not be closed until all functions and values that it creates are
+// deleted.
+
 class
-octave_integer : public octave_base_value
+octave_integer : public octave_base_dld_value
 {
 public:
 
   octave_integer (void)
-    : octave_base_value (), scalar (0) { }
+    : octave_base_dld_value (), scalar (0) { }
 
   octave_integer (int i)
-    : octave_base_value (), scalar (i) { }
+    : octave_base_dld_value (), scalar (i) { }
 
   octave_integer (const octave_integer& s)
-    : octave_base_value (), scalar (s.scalar) { }
+    : octave_base_dld_value (), scalar (s.scalar) { }
 
   ~octave_integer (void) = default;
 
@@ -219,7 +225,6 @@
   if (! type_loaded)
     {
       octave_integer::register_type ();
-      interp.mlock ();
 
       octave_stdout << "installing integer type at type-id = "
                     << octave_integer::static_type_id () << "\n";
--- a/libinterp/dldfcn/__init_fltk__.cc	Fri Feb 18 19:26:24 2022 +0100
+++ b/libinterp/dldfcn/__init_fltk__.cc	Fri Feb 18 16:08: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"
@@ -2269,12 +2270,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; }
 
@@ -2486,6 +2491,8 @@
   octave::interpreter& m_interpreter;
 
   octave_value_list input_event_hook_fcn_id;
+
+  octave::auto_shlib m_containing_dynamic_library;
 };
 
 #endif
@@ -2525,8 +2532,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 19:26:24 2022 +0100
+++ b/libinterp/dldfcn/__init_gnuplot__.cc	Fri Feb 18 16:08: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 ();