# HG changeset patch # User John W. Eaton # Date 1645218418 18000 # Node ID fc530ec01070444cd1d83306a1dfa097b1a4afaa # Parent 25d08ca386a7de452d0d880b6dd948ba9e715354 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. diff -r 25d08ca386a7 -r fc530ec01070 libinterp/dldfcn/__init_fltk__.cc --- 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); diff -r 25d08ca386a7 -r fc530ec01070 libinterp/dldfcn/__init_gnuplot__.cc --- 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 +#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 ();