summaryrefslogtreecommitdiffstats
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:51 +0100
commit42735fc06daf32785d470622b170ab2dc5073926 (patch)
treeba3714291b416124c7d20e78f5012eafde0ed8a7
parent580532cfd0c23e27a366c074e806fc0b6908b874 (diff)
downloadpoky-42735fc06daf32785d470622b170ab2dc5073926.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: 70ea322a4866f7ef20361a6b146f2be568261c6a) 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>
-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 8fdcc66dc7..91c4637522 100644
--- a/bitbake/lib/bb/server/process.py
+++ b/bitbake/lib/bb/server/process.py
@@ -27,6 +27,7 @@ import re
27import datetime 27import datetime
28import pickle 28import pickle
29import traceback 29import traceback
30import gc
30import bb.server.xmlrpcserver 31import bb.server.xmlrpcserver
31from bb import daemonize 32from bb import daemonize
32from multiprocessing import queues 33from multiprocessing import queues
@@ -739,8 +740,10 @@ class ConnectionWriter(object):
739 740
740 def send(self, obj): 741 def send(self, obj):
741 obj = multiprocessing.reduction.ForkingPickler.dumps(obj) 742 obj = multiprocessing.reduction.ForkingPickler.dumps(obj)
743 gc.disable()
742 with self.wlock: 744 with self.wlock:
743 self.writer.send_bytes(obj) 745 self.writer.send_bytes(obj)
746 gc.enable()
744 747
745 def fileno(self): 748 def fileno(self):
746 return self.writer.fileno() 749 return self.writer.fileno()