Mercurial > octave
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 ();