chiark / gitweb /
Improve error logging on out of memory. Improve plugin handling memory.
authordaid <daid303@gmail.com>
Tue, 2 Dec 2014 10:00:56 +0000 (11:00 +0100)
committerdaid <daid303@gmail.com>
Tue, 2 Dec 2014 10:00:56 +0000 (11:00 +0100)
Cura/util/bigDataStorage.py
Cura/util/pluginInfo.py
Cura/util/sliceEngine.py

index 970a9ed7ee31f115c202c936f4b67a5aaa214da4..d1b4e84d73489acdfbb3600b77afd3c4d2d6b9f0 100644 (file)
@@ -1,3 +1,4 @@
+import sys\r
 import cStringIO as StringIO\r
 \r
 class BigDataStorage(object):\r
index c881bf88bb44d12aad09bf7847bc7f97a19d8507..eba3770b74d34367ff737bddd4580455f1eebe3c 100644 (file)
@@ -136,6 +136,7 @@ def runPostProcessingPlugins(engineResult):
                                        break
                                f.write(data)
                        f.close()
+                       del gcode
 
                locals = {'filename': tempfilename}
                for param in plugin.getParams():
@@ -157,7 +158,13 @@ def runPostProcessingPlugins(engineResult):
                        return "%s: '%s' @ %s:%s:%d" % (str(sys.exc_info()[0].__name__), str(sys.exc_info()[1]), os.path.basename(locationInfo[0]), locationInfo[2], locationInfo[1])
        if tempfilename is not None:
                f = open(tempfilename, "r")
-               engineResult.setGCode(f.read())
+               engineResult.setGCode("")
+               import gc
+               gc.collect()
+               data = f.read(4096)
+               while len(data) > 0:
+                       engineResult._gcodeData.write(data)
+                       data = f.read(4096)
                f.close()
                os.unlink(tempfilename)
        return None
index 125d86aaf2818b4482b438b4b69acf595241d3b0..78ee7faad7a26450b0eee93acd08e221614ebc9c 100644 (file)
@@ -385,25 +385,29 @@ class Engine(object):
                logThread.daemon = True
                logThread.start()
 
-               data = self._process.stdout.read(4096)
-               while len(data) > 0:
-                       self._result._gcodeData.write(data)
+               try:
                        data = self._process.stdout.read(4096)
-
-               returnCode = self._process.wait()
-               logThread.join()
-               if returnCode == 0:
-                       pluginError = pluginInfo.runPostProcessingPlugins(self._result)
-                       if pluginError is not None:
-                               print pluginError
-                               self._result.addLog(pluginError)
-                       self._result.setFinished(True)
-                       self._callback(1.0)
-               else:
-                       for line in self._result.getLog():
-                               print line
+                       while len(data) > 0:
+                               self._result._gcodeData.write(data)
+                               data = self._process.stdout.read(4096)
+
+                       returnCode = self._process.wait()
+                       logThread.join()
+                       if returnCode == 0:
+                               self._result.setFinished(True)
+                               plugin_error = pluginInfo.runPostProcessingPlugins(self._result)
+                               if plugin_error is not None:
+                                       print plugin_error
+                                       self._result.addLog(plugin_error)
+                               self._callback(1.0)
+                       else:
+                               for line in self._result.getLog():
+                                       print line
+                               self._callback(-1.0)
+                       self._process = None
+               except MemoryError:
+                       self._result.addLog("MemoryError")
                        self._callback(-1.0)
-               self._process = None
 
        def _watchStderr(self, stderr):
                objectNr = 0