From 2ffbb020fe1d9f332fdc58cd93d7a41885850771 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 5 Feb 2021 17:55:33 +0000 Subject: bitbake: bitbake-worker: Try and avoid potential short write events issues We're seeing occasional issues where builds fail as events were written from the worker children in the form partial datafull event. This causes failures as bitbake server can't parse that and exits. This could be due to short writes to the worker event pipe which we weren't checking. Check this and loop accordingly. Also add some asserts to detect other potential causes. Thanks to Joshua Watt for help in spotting the issue. [YOCTO #14181] (Bitbake rev: a9451746a4bd7ccedf4c72cd03ad4ff0ab0143aa) Signed-off-by: Richard Purdie --- bitbake/bin/bitbake-worker | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bitbake/bin/bitbake-worker b/bitbake/bin/bitbake-worker index 9334f11fb8..40da7a0c2b 100755 --- a/bitbake/bin/bitbake-worker +++ b/bitbake/bin/bitbake-worker @@ -118,7 +118,9 @@ def worker_child_fire(event, d): data = b"" + pickle.dumps(event) + b"" try: worker_pipe_lock.acquire() - worker_pipe.write(data) + while(len(data)): + written = worker_pipe.write(data) + data = data[written:] worker_pipe_lock.release() except IOError: sigterm_handler(None, None) @@ -321,7 +323,9 @@ class runQueueWorkerPipe(): end = len(self.queue) index = self.queue.find(b"") while index != -1: - worker_fire_prepickled(self.queue[:index+8]) + msg = self.queue[:index+8] + assert msg.startswith(b"") and msg.count(b"") == 1 + worker_fire_prepickled(msg) self.queue = self.queue[index+8:] index = self.queue.find(b"") return (end > start) -- cgit v1.2.3-54-g00ecf