diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-04-16 09:17:10 -1000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-04-16 23:03:41 +0100 |
commit | ce50594d709f473fbad30e187565531af6714aaa (patch) | |
tree | 5b112dc4d0d185aeb63c63a4a8b1973516e783fc /bitbake/lib | |
parent | 38c55bd388e141eb691d62143cda492437cbe752 (diff) | |
download | poky-ce50594d709f473fbad30e187565531af6714aaa.tar.gz |
bitbake: server/process: Disable gc around critical section
The python gc can trigger whilst we're holding the event stream lock
and when cleaning up objects, they can trigger warnings. This translates
into a new event which would then need the lock and we can deadlock.
Disable gc whilst we hold that lock to avoid this unfortunate and
problematic situation.
(Bitbake rev: 0784db7dd0fef6f0621ad8d74372f44e87fef950)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 96a6303949cefd469bcf5ed250ff512271354357)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/server/process.py | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py index 3c9ed70689..4bdb84ae37 100644 --- a/bitbake/lib/bb/server/process.py +++ b/bitbake/lib/bb/server/process.py | |||
@@ -25,6 +25,7 @@ import subprocess | |||
25 | import errno | 25 | import errno |
26 | import re | 26 | import re |
27 | import datetime | 27 | import datetime |
28 | import gc | ||
28 | import bb.server.xmlrpcserver | 29 | import bb.server.xmlrpcserver |
29 | from bb import daemonize | 30 | from bb import daemonize |
30 | from multiprocessing import queues | 31 | from multiprocessing import queues |
@@ -671,8 +672,10 @@ class ConnectionWriter(object): | |||
671 | 672 | ||
672 | def send(self, obj): | 673 | def send(self, obj): |
673 | obj = multiprocessing.reduction.ForkingPickler.dumps(obj) | 674 | obj = multiprocessing.reduction.ForkingPickler.dumps(obj) |
675 | gc.disable() | ||
674 | with self.wlock: | 676 | with self.wlock: |
675 | self.writer.send_bytes(obj) | 677 | self.writer.send_bytes(obj) |
678 | gc.enable() | ||
676 | 679 | ||
677 | def fileno(self): | 680 | def fileno(self): |
678 | return self.writer.fileno() | 681 | return self.writer.fileno() |