changeset 25057:6bc4958b224b stable

If getframe fails, retry twice after increasing delays (bug #53328). * ObjectProxy.cc (ObjectProxy::get_pixels): if QMetaObject::invokeMethod fails, retry twice after increasing delay.
author Pantxo Diribarne <pantxo.diribarne@gmail.com>
date Fri, 30 Mar 2018 11:05:31 +0200
parents 6c1611e6830f
children f776e458d2e3
files libgui/graphics/ObjectProxy.cc
diffstat 1 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/graphics/ObjectProxy.cc	Fri Mar 30 10:03:06 2018 -0700
+++ b/libgui/graphics/ObjectProxy.cc	Fri Mar 30 11:05:31 2018 +0200
@@ -129,7 +129,23 @@
     QMetaObject::invokeMethod (m_object, "slotGetPixels", t,
                                Q_RETURN_ARG (uint8NDArray, retval));
 
-    return retval;
-  }
+    // FIXME: The following may fail for obscure reasons, see bug #53328.
+    //        In absence of a solution, we retry twice before calling error().
+    if (! QMetaObject::invokeMethod (m_object, "slotGetPixels", t,
+                                     Q_RETURN_ARG (uint8NDArray, retval)))
+      {
+        QThread::msleep (100);
+        if (! QMetaObject::invokeMethod (m_object, "slotGetPixels", t,
+                                         Q_RETURN_ARG (uint8NDArray, retval)))
+          {
+            QThread::msleep (200);
+            if (! QMetaObject::invokeMethod (m_object, "slotGetPixels", t,
+                                             Q_RETURN_ARG (uint8NDArray, retval)))
+              error ("getframe: unable to retrieve figure pixels");
+          }
+      }
+    
+     return retval;
+   }
 
 };