Commit 0cfb5a16 authored by Boris Kocherov's avatar Boris Kocherov

stop hanging uno thread

parent 722dad78
......@@ -126,11 +126,14 @@ class Handler(object):
if pid_exists(process.pid):
logger.debug("Process %s terminated", process.pid)
process.terminate()
if (process.returncode < 0 and process.returncode != -6) or stderr:
if (process.returncode != -6) or stderr:
logger.error("Process %s command:%s", process.pid, " ".join(command_list))
logger.error("Process %s stdout:%s", process.pid, stdout)
logger.error("Process %s stderr:%s", process.pid, stderr)
logger.debug("Process %s terminated with returncode %s", process.pid, process.returncode)
if process.returncode != -6:
raise ValueError("unocnverter.py should always be interrupted by abort,"
" otherwise deadlock can be raised")
return stdout, stderr
def _callUnoConverter(self, *feature_list, **kw):
......
......@@ -367,4 +367,12 @@ def main():
sys.stdout.write(output)
if "__main__" == __name__:
main()
# use abort for avoid deadlock
try:
main()
except:
import traceback
sys.stderr.write(traceback.format_exc())
sys.stdout.flush()
sys.stderr.flush()
os.abort()
......@@ -75,9 +75,9 @@ class TestUnoConverter(HandlerTestCase):
"--destination_format=%s" % "doc",
"--source_format=%s" % "odt",
"--mimemapper=%s" % mimemapper_pickled]
stdout, stderr = Popen(command,
stdout=PIPE,
stderr=PIPE).communicate()
process = Popen(command, stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()
self.assertEquals(process.returncode, -6)
self.assertEquals(stderr, '')
output_url = stdout.replace('\n', '')
self.assertTrue(exists(output_url), stdout)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment