Obscure crash error message
Greetings!
I was reducing the Lua interpreter when after 9 days I got this crash:
...
9 days, 8:57:49 INFO (85.8%, 102252 bytes, 1926 lines)
9 days, 9:00:04 INFO (85.8%, 102245 bytes, 1926 lines)
Traceback (most recent call last):
File "/usr/bin/cvise", line 312, in <module>
reducer.reduce(pass_group, skip_initial=args.skip_initial_passes)
File "/usr/share/cvise/cvise.py", line 146, in reduce
self._run_main_passes(pass_group['main'])
File "/usr/share/cvise/cvise.py", line 176, in _run_main_passes
self.test_manager.run_pass(p)
File "/usr/share/cvise/utils/testing.py", line 529, in run_pass
success_env = self.run_parallel_tests()
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/share/cvise/utils/testing.py", line 445, in run_parallel_tests
quit_loop = self.process_done_futures()
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/share/cvise/utils/testing.py", line 378, in process_done_futures
raise future.exception()
pebble.common.ProcessExpired: Abnormal termination
The error doesn't really tell me what went wrong. I wonder if the message could be improved somehow?
This was using cvise 2.7.0 (d9e4a505) from the Debian apt repo.
(It's possible this has already been fixed I guess)
The error comes from pebble package and it's something not expected. Hard to guess what caused that.
I happened to observe this problem occasionally too. In my case after adding more debug logging in Pebble it turned out to be some kind of rare deadlock that prevents worker processes from receiving tasks and/or causing timeouts on a mutex shared between processes.
This deadlock is tough to investigate, but I'm testing whether switching to forkserver multiprocessing model helps; the current default fork strategy is dangerous because Pebble creates background threads, meanwhile forking a multithreaded program is in principle fragile in POSIX (with deadlocks being one of typical symptoms).