# HG changeset patch # User John W. Eaton # Date 1323382977 18000 # Node ID 8feb25ecddaf41765a006f22ec0a33b83cd18363 # Parent 77adde2e79accf8077d6f603ab102cd0861c4c7e close all graphics toolkits before exit * graphics.h (graphics_toolkit::close_all_toolkits): Move here from graphics.cc. Ensure that the toolkit is closed and deleted properly. * toplev.cc (clean_up_and_exit): Call graphics_toolkit::close_all_toolkits. diff -r 77adde2e79ac -r 8feb25ecddaf src/graphics.cc --- a/src/graphics.cc Thu Dec 08 11:01:52 2011 -0500 +++ b/src/graphics.cc Thu Dec 08 17:22:57 2011 -0500 @@ -2890,19 +2890,6 @@ return available_toolkits["gnuplot"]; } -void -graphics_toolkit::close_all_toolkits (void) -{ - while (! available_toolkits.empty ()) - { - available_toolkits_iterator p = available_toolkits.begin (); - - p->second.close (); - - available_toolkits.erase (p); - } -} - std::map graphics_toolkit::available_toolkits; // --------------------------------------------------------------------- diff -r 77adde2e79ac -r 8feb25ecddaf src/graphics.h.in --- a/src/graphics.h.in Thu Dec 08 11:01:52 2011 -0500 +++ b/src/graphics.h.in Thu Dec 08 17:22:57 2011 -0500 @@ -2236,8 +2236,6 @@ // Close the graphics toolkit. void close (void) { rep->close (); } - void close_all_toolkits (void); - OCTINTERP_API static graphics_toolkit default_toolkit (void); static void register_toolkit (const graphics_toolkit& b) @@ -2269,6 +2267,23 @@ return m; } + static void close_all_toolkits (void) + { + while (! available_toolkits.empty ()) + { + available_toolkits_iterator p = available_toolkits.begin (); + + std::string name = p->first; + + p->second.close (); + + // The toolkit may have unregistered itself. If not, we'll do + // it here. + if (available_toolkits.find (name) != available_toolkits.end ()) + unregister_toolkit (name); + } + } + private: base_graphics_toolkit *rep; diff -r 77adde2e79ac -r 8feb25ecddaf src/toplev.cc --- a/src/toplev.cc Thu Dec 08 11:01:52 2011 -0500 +++ b/src/toplev.cc Thu Dec 08 17:22:57 2011 -0500 @@ -671,6 +671,8 @@ OCTAVE_SAFE_CALL (gh_manager::close_all_figures, ()); + OCTAVE_SAFE_CALL (graphics_toolkit::close_all_toolkits, ()); + OCTAVE_SAFE_CALL (symbol_table::cleanup, ()); OCTAVE_SAFE_CALL (cleanup_parser, ());