# HG changeset patch # User John W. Eaton # Date 1426637776 14400 # Node ID b6061813a6939fa4dc84f0329846ca2019dfdb26 # Parent ed51e17f6ccf1af6b98cf13dfb9ebd321beae2c1 always obtain gh_manager lock before accessing graphics objects * Canvas.cc (Canvas::print, Canvas::updateCurrentPoint): Use gh_manager::auto_lock before accessing object. * Container.cc (Container::canvas): Likewise. * ContextMenu.cc (ContextMenu::executeAt): Likewise. * Figure.cc (hasUiControlChildren, hasUiMenuChildren): Likewise. * GLCanvas.cc (GLCanvas::draw): Likewise. * Object.cc (Object::objectDestroyed): Likewise. * __init_qt__.cc (__init__, __shutdown__): Likewise. diff -r ed51e17f6ccf -r b6061813a693 libgui/graphics/Canvas.cc --- a/libgui/graphics/Canvas.cc Tue Mar 17 20:10:01 2015 -0400 +++ b/libgui/graphics/Canvas.cc Tue Mar 17 20:16:16 2015 -0400 @@ -91,6 +91,7 @@ void Canvas::print (const QString& file_cmd, const QString& term) { + gh_manager::auto_lock lock; graphics_object obj = gh_manager::get_object (m_handle); if (obj.valid_object ()) @@ -104,6 +105,8 @@ void Canvas::updateCurrentPoint(const graphics_object& fig, const graphics_object& obj, QMouseEvent* event) { + gh_manager::auto_lock lock; + gh_manager::post_set (fig.get_handle (), "currentpoint", Utils::figureCurrentPoint (fig, event), false); diff -r ed51e17f6ccf -r b6061813a693 libgui/graphics/Container.cc --- a/libgui/graphics/Container.cc Tue Mar 17 20:10:01 2015 -0400 +++ b/libgui/graphics/Container.cc Tue Mar 17 20:16:16 2015 -0400 @@ -51,6 +51,7 @@ { if (! m_canvas && xcreate) { + gh_manager::auto_lock lock; graphics_object go = gh_manager::get_object (gh); if (go) diff -r ed51e17f6ccf -r b6061813a693 libgui/graphics/ContextMenu.cc --- a/libgui/graphics/ContextMenu.cc Tue Mar 17 20:10:01 2015 -0400 +++ b/libgui/graphics/ContextMenu.cc Tue Mar 17 20:16:16 2015 -0400 @@ -111,6 +111,7 @@ if (h.ok ()) { + gh_manager::auto_lock lock; graphics_object go = gh_manager::get_object (h); if (go.valid_object ()) diff -r ed51e17f6ccf -r b6061813a693 libgui/graphics/Figure.cc --- a/libgui/graphics/Figure.cc Tue Mar 17 20:10:01 2015 -0400 +++ b/libgui/graphics/Figure.cc Tue Mar 17 20:16:16 2015 -0400 @@ -60,6 +60,8 @@ static bool hasUiControlChildren (const figure::properties& fp) { + gh_manager::auto_lock lock; + Matrix kids = fp.get_all_children (); for (int i = 0; i < kids.numel (); i++) @@ -76,6 +78,8 @@ static bool hasUiMenuChildren (const figure::properties& fp) { + gh_manager::auto_lock lock; + Matrix kids = fp.get_all_children (); for (int i = 0; i < kids.numel (); i++) diff -r ed51e17f6ccf -r b6061813a693 libgui/graphics/GLCanvas.cc --- a/libgui/graphics/GLCanvas.cc Tue Mar 17 20:10:01 2015 -0400 +++ b/libgui/graphics/GLCanvas.cc Tue Mar 17 20:16:16 2015 -0400 @@ -49,6 +49,7 @@ void GLCanvas::draw (const graphics_handle& gh) { + gh_manager::auto_lock lock; graphics_object go = gh_manager::get_object (gh); if (go) diff -r ed51e17f6ccf -r b6061813a693 libgui/graphics/Object.cc --- a/libgui/graphics/Object.cc Tue Mar 17 20:10:01 2015 -0400 +++ b/libgui/graphics/Object.cc Tue Mar 17 20:16:16 2015 -0400 @@ -156,6 +156,8 @@ Object* Object::parentObject (const graphics_object& go) { + gh_manager::auto_lock lock; + Object* parent = Backend::toolkitObject (gh_manager::get_object (go.get_parent ())); diff -r ed51e17f6ccf -r b6061813a693 libgui/graphics/__init_qt__.cc --- a/libgui/graphics/__init_qt__.cc Tue Mar 17 20:10:01 2015 -0400 +++ b/libgui/graphics/__init_qt__.cc Tue Mar 17 20:16:16 2015 -0400 @@ -49,6 +49,8 @@ { if (qApp) { + gh_manager::auto_lock lock; + qRegisterMetaType ("graphics_object"); gh_manager::enable_event_processing (true); @@ -96,6 +98,8 @@ { if (qtHandlesInitialized) { + gh_manager::auto_lock lock; + octave_add_atexit_function ("__shutdown_qt__"); gtk_manager::unload_toolkit ("qt");