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: d01d8326331cfe59208674cfc53aa26c0028b313)

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>
This commit is contained in:
Richard Purdie 2022-04-16 09:17:10 -10:00
parent 52645c8607
commit eee9fba7b4

View File

@ -26,6 +26,7 @@ import errno
import re import re
import datetime import datetime
import pickle import pickle
import gc
import bb.server.xmlrpcserver import bb.server.xmlrpcserver
from bb import daemonize from bb import daemonize
from multiprocessing import queues from multiprocessing import queues
@ -737,8 +738,10 @@ class ConnectionWriter(object):
def send(self, obj): def send(self, obj):
obj = multiprocessing.reduction.ForkingPickler.dumps(obj) obj = multiprocessing.reduction.ForkingPickler.dumps(obj)
gc.disable()
with self.wlock: with self.wlock:
self.writer.send_bytes(obj) self.writer.send_bytes(obj)
gc.enable()
def fileno(self): def fileno(self):
return self.writer.fileno() return self.writer.fileno()