diff liboctave/util/oct-shlib.cc @ 30749:076e19eac74a stable

allow deletion of dynamic_library objects to be delayed * oct-shlib.h, oct-shlib.cc (dynamic_library::delete_later): New function. (possibly_unreferenced_dynamic_libraries): New static object. (release_unreferenced_dynamic_libraries): New function. * interpreter.cc (interpreter::main_loop): Add release_unreferenced_dynamic_libraries as new event_hook. * pt-eval.cc (debugger::server_loop, tree_evaluator::server_loop): Also call release_unreferenced_dynamic_libraries in event loop.
author John W. Eaton <jwe@octave.org>
date Thu, 17 Feb 2022 22:21:03 -0500
parents bfff3d523690
children e88a07dec498
line wrap: on
line diff
--- a/liboctave/util/oct-shlib.cc	Thu Feb 17 22:19:11 2022 -0500
+++ b/liboctave/util/oct-shlib.cc	Thu Feb 17 22:21:03 2022 -0500
@@ -27,6 +27,7 @@
 #  include "config.h"
 #endif
 
+#include <list>
 #include <map>
 
 extern "C"
@@ -59,6 +60,20 @@
 
 namespace octave
 {
+  std::list<dynamic_library> possibly_unreferenced_dynamic_libraries;
+
+  void dynamic_library::delete_later (void)
+  {
+    possibly_unreferenced_dynamic_libraries.push_back (*this);
+  }
+
+  int release_unreferenced_dynamic_libraries (void)
+  {
+    possibly_unreferenced_dynamic_libraries.clear ();
+
+    return 0;
+  }
+
   dynamic_library::dynlib_rep::dynlib_rep (const std::string& f)
     : m_count (1), m_fcn_names (), m_file (f), m_time_loaded (),
       m_search_all_loaded (false)