Bug 1272782 - Don't wait forever for child process to exit; r?ahal
I believe this is the source of hangs/timeouts in automation.
join() waits forever. We add code to wait at most N seconds before
force terminating the process. The timeout is a bit high. But it is
better than infinite.
MozReview-Commit-ID: KwyO4RZ9OqL
--- a/testing/mozbase/mozsystemmonitor/mozsystemmonitor/resourcemonitor.py
+++ b/testing/mozbase/mozsystemmonitor/mozsystemmonitor/resourcemonitor.py
@@ -307,18 +307,27 @@ class SystemResourceMonitor(object):
io = self._io_type(*io_diff)
virt = self._virt_type(*virt_mem)
swap = self._swap_type(*swap_mem)
cpu_times = [self._cpu_times_type(*v) for v in cpu_diff]
self.measurements.append(SystemResourceUsage(start_time, end_time,
cpu_times, cpu_percent, io, virt, swap))
- self._process.join()
- assert done
+ # We establish a timeout so we don't hang forever if the child
+ # process has crashed.
+ self._process.join(10)
+ if self._process.is_alive():
+ self._process.terminate()
+ self._process.join(10)
+ else:
+ # We should have received a "done" message from the
+ # child indicating it shut down properly. This only
+ # happens if the child shuts down cleanly.
+ assert done
if len(self.measurements):
self.start_time = self.measurements[0].start
self.end_time = self.measurements[-1].end
# Methods to record events alongside the monitored data.
def record_event(self, name):