changeset 20163:b6061813a693

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.
author John W. Eaton <jwe@octave.org>
date Tue, 17 Mar 2015 20:16:16 -0400
parents ed51e17f6ccf
children b57b7f3f5e61
files libgui/graphics/Canvas.cc libgui/graphics/Container.cc libgui/graphics/ContextMenu.cc libgui/graphics/Figure.cc libgui/graphics/GLCanvas.cc libgui/graphics/Object.cc libgui/graphics/__init_qt__.cc
diffstat 7 files changed, 16 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/graphics/Canvas.cc
+++ b/libgui/graphics/Canvas.cc
@@ -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);
 
--- a/libgui/graphics/Container.cc
+++ b/libgui/graphics/Container.cc
@@ -51,6 +51,7 @@
 {
   if (! m_canvas && xcreate)
     {
+      gh_manager::auto_lock lock;
       graphics_object go = gh_manager::get_object (gh);
 
       if (go)
--- a/libgui/graphics/ContextMenu.cc
+++ b/libgui/graphics/ContextMenu.cc
@@ -111,6 +111,7 @@
 
   if (h.ok ())
     {
+      gh_manager::auto_lock lock;
       graphics_object go = gh_manager::get_object (h);
 
       if (go.valid_object ())
--- a/libgui/graphics/Figure.cc
+++ b/libgui/graphics/Figure.cc
@@ -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++)
--- a/libgui/graphics/GLCanvas.cc
+++ b/libgui/graphics/GLCanvas.cc
@@ -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)
--- a/libgui/graphics/Object.cc
+++ b/libgui/graphics/Object.cc
@@ -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 ()));
 
--- a/libgui/graphics/__init_qt__.cc
+++ b/libgui/graphics/__init_qt__.cc
@@ -49,6 +49,8 @@
     {
       if (qApp)
         {
+          gh_manager::auto_lock lock;
+
           qRegisterMetaType<graphics_object> ("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");