summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2022-04-16 09:17:10 -1000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-04-16 23:03:41 +0100
commitce50594d709f473fbad30e187565531af6714aaa (patch)
tree5b112dc4d0d185aeb63c63a4a8b1973516e783fc /bitbake
parent38c55bd388e141eb691d62143cda492437cbe752 (diff)
downloadpoky-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')
-rw-r--r--bitbake/lib/bb/server/process.py3
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
25import errno 25import errno
26import re 26import re
27import datetime 27import datetime
28import gc
28import bb.server.xmlrpcserver 29import bb.server.xmlrpcserver
29from bb import daemonize 30from bb import daemonize
30from multiprocessing import queues 31from 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()