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