* [bitbake][styhead][2.10][PATCH 0/4] Patch review
@ 2024-10-30 16:01 Steve Sakoman
0 siblings, 0 replies; 6+ messages in thread
From: Steve Sakoman @ 2024-10-30 16:01 UTC (permalink / raw)
To: bitbake-devel
Please review this set of changes for styhead/2.10 and have comments back
by end of day Friday, November 1
Passed a-full on autobuilder:
https://valkyrie.yoctoproject.org/#/builders/29/builds/369
The following changes since commit 9ef4f2a30127455562e38e869793a723eed6c07c:
fetch2/git: Use quote from shlex, not pipes (2024-10-01 12:42:22 +0100)
are available in the Git repository at:
https://git.openembedded.org/bitbake-contrib stable/2.10-nut
https://git.openembedded.org/bitbake-contrib/log/?h=stable/2.10-nut
Richard Purdie (2):
tests/fetch: Use our own mirror of sysprof to decouple from gnome
gitlab
tests/fetch: Use our own mirror of mobile-broadband-provider to
decouple from gnome gitlab
Robert Yang (2):
gitsm: Add call_process_submodules() to remove duplicated code
gitsm: Remove downloads/tmpdir when failed
lib/bb/fetch2/gitsm.py | 44 +++++++++++++++---------------------------
lib/bb/tests/fetch.py | 4 ++--
2 files changed, 18 insertions(+), 30 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [bitbake][styhead][2.10][PATCH 0/4] Patch review
@ 2025-03-07 13:54 Steve Sakoman
2025-03-07 13:54 ` [bitbake][styhead][2.10][PATCH 1/4] utils: Print information about lock issue before exiting Steve Sakoman
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Steve Sakoman @ 2025-03-07 13:54 UTC (permalink / raw)
To: bitbake-devel
Please review this set of changes for 2.10/styhead and have comments back
by end of day Monday, March 10
Passed a-full on autobuilder:
https://autobuilder.yoctoproject.org/valkyrie/#/builders/29/builds/1138
The following changes since commit 58e5c70a0572ff5994dc181694e05cd5d3ddaf66:
bblayers/query: Fix using "removeprefix" string method (2025-02-21 13:14:07 +0000)
are available in the Git repository at:
https://git.openembedded.org/bitbake-contrib stable/2.10-nut
https://git.openembedded.org/bitbake-contrib/log/?h=stable/2.10-nut
Richard Purdie (4):
utils: Print information about lock issue before exiting
utils: Tweak lock_timeout logic
utils: Add signal blocking for lock_timeout
event/utils: Avoid deadlock from lock_timeout() and recursive events
lib/bb/event.py | 10 +++++++++-
lib/bb/utils.py | 20 +++++++++++++++++++-
2 files changed, 28 insertions(+), 2 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [bitbake][styhead][2.10][PATCH 1/4] utils: Print information about lock issue before exiting
2025-03-07 13:54 [bitbake][styhead][2.10][PATCH 0/4] Patch review Steve Sakoman
@ 2025-03-07 13:54 ` Steve Sakoman
2025-03-07 13:54 ` [bitbake][styhead][2.10][PATCH 2/4] utils: Tweak lock_timeout logic Steve Sakoman
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Steve Sakoman @ 2025-03-07 13:54 UTC (permalink / raw)
To: bitbake-devel
From: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit cdf6c51a064f8f335c3262b7f102618996f1a229)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
---
lib/bb/utils.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/bb/utils.py b/lib/bb/utils.py
index ebee65d3d..0dfe47dc5 100644
--- a/lib/bb/utils.py
+++ b/lib/bb/utils.py
@@ -1862,6 +1862,7 @@ def lock_timeout(lock):
held = lock.acquire(timeout=5*60)
try:
if not held:
+ bb.server.process.serverlog("Couldn't get the lock for 5 mins, timed out, exiting.\n%s" % traceback.format_stack())
os._exit(1)
yield held
finally:
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [bitbake][styhead][2.10][PATCH 2/4] utils: Tweak lock_timeout logic
2025-03-07 13:54 [bitbake][styhead][2.10][PATCH 0/4] Patch review Steve Sakoman
2025-03-07 13:54 ` [bitbake][styhead][2.10][PATCH 1/4] utils: Print information about lock issue before exiting Steve Sakoman
@ 2025-03-07 13:54 ` Steve Sakoman
2025-03-07 13:54 ` [bitbake][styhead][2.10][PATCH 3/4] utils: Add signal blocking for lock_timeout Steve Sakoman
2025-03-07 13:54 ` [bitbake][styhead][2.10][PATCH 4/4] event/utils: Avoid deadlock from lock_timeout() and recursive events Steve Sakoman
3 siblings, 0 replies; 6+ messages in thread
From: Steve Sakoman @ 2025-03-07 13:54 UTC (permalink / raw)
To: bitbake-devel
From: Richard Purdie <richard.purdie@linuxfoundation.org>
We should really try and take the lock in the try/finally block so that
in some rare cases such as badly timed interrupt/signal, we always release
the lock.
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit a9eb8bf7174b6962b5ba07192fe95b8c7112d9d2)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
---
lib/bb/utils.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/bb/utils.py b/lib/bb/utils.py
index 0dfe47dc5..83e832c33 100644
--- a/lib/bb/utils.py
+++ b/lib/bb/utils.py
@@ -1859,8 +1859,8 @@ def path_is_descendant(descendant, ancestor):
# we exit at some point than hang. 5 minutes with no progress means we're probably deadlocked.
@contextmanager
def lock_timeout(lock):
- held = lock.acquire(timeout=5*60)
try:
+ held = lock.acquire(timeout=5*60)
if not held:
bb.server.process.serverlog("Couldn't get the lock for 5 mins, timed out, exiting.\n%s" % traceback.format_stack())
os._exit(1)
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [bitbake][styhead][2.10][PATCH 3/4] utils: Add signal blocking for lock_timeout
2025-03-07 13:54 [bitbake][styhead][2.10][PATCH 0/4] Patch review Steve Sakoman
2025-03-07 13:54 ` [bitbake][styhead][2.10][PATCH 1/4] utils: Print information about lock issue before exiting Steve Sakoman
2025-03-07 13:54 ` [bitbake][styhead][2.10][PATCH 2/4] utils: Tweak lock_timeout logic Steve Sakoman
@ 2025-03-07 13:54 ` Steve Sakoman
2025-03-07 13:54 ` [bitbake][styhead][2.10][PATCH 4/4] event/utils: Avoid deadlock from lock_timeout() and recursive events Steve Sakoman
3 siblings, 0 replies; 6+ messages in thread
From: Steve Sakoman @ 2025-03-07 13:54 UTC (permalink / raw)
To: bitbake-devel
From: Richard Purdie <richard.purdie@linuxfoundation.org>
We never want to exit whilst holding these locks as it deadlocks all python
threads. Add signal blocking around the lock critical part so a signal
shouldn't cause such an exit.
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit a097755c671e2b530dea6200a94b39fa9dca246c)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
---
lib/bb/utils.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/lib/bb/utils.py b/lib/bb/utils.py
index 83e832c33..da026fe5b 100644
--- a/lib/bb/utils.py
+++ b/lib/bb/utils.py
@@ -1860,6 +1860,7 @@ def path_is_descendant(descendant, ancestor):
@contextmanager
def lock_timeout(lock):
try:
+ s = signal.pthread_sigmask(signal.SIG_BLOCK, signal.valid_signals())
held = lock.acquire(timeout=5*60)
if not held:
bb.server.process.serverlog("Couldn't get the lock for 5 mins, timed out, exiting.\n%s" % traceback.format_stack())
@@ -1867,3 +1868,4 @@ def lock_timeout(lock):
yield held
finally:
lock.release()
+ signal.pthread_sigmask(signal.SIG_SETMASK, s)
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [bitbake][styhead][2.10][PATCH 4/4] event/utils: Avoid deadlock from lock_timeout() and recursive events
2025-03-07 13:54 [bitbake][styhead][2.10][PATCH 0/4] Patch review Steve Sakoman
` (2 preceding siblings ...)
2025-03-07 13:54 ` [bitbake][styhead][2.10][PATCH 3/4] utils: Add signal blocking for lock_timeout Steve Sakoman
@ 2025-03-07 13:54 ` Steve Sakoman
3 siblings, 0 replies; 6+ messages in thread
From: Steve Sakoman @ 2025-03-07 13:54 UTC (permalink / raw)
To: bitbake-devel
From: Richard Purdie <richard.purdie@linuxfoundation.org>
We've been seeing intermittent failures on Ubuntu 22.04 in oe-selftest which
were problematic to debug. The failure was inside lock_timeout and once that was
identified and the backtrace obtained, the problem becomes clearer:
File "X/bitbake/lib/bb/server/process.py", line 466, in idle_thread_internal
retval = function(self, data, False)
File "X/bitbake/lib/bb/command.py", line 123, in runAsyncCommand
self.cooker.updateCache()
File "X/bitbake/lib/bb/cooker.py", line 1629, in updateCache
self.parser = CookerParser(self, mcfilelist, total_masked)
File "X/bitbake/lib/bb/cooker.py", line 2141, in __init__
self.bb_caches = bb.cache.MulticonfigCache(self.cfgbuilder, self.cfghash, cooker.caches_array)
File "X/bitbake/lib/bb/cache.py", line 772, in __init__
loaded += c.prepare_cache(progress)
File "X/bitbake/lib/bb/cache.py", line 435, in prepare_cache
loaded = self.load_cachefile(progress)
File "X/bitbake/lib/bb/cache.py", line 516, in load_cachefile
progress(cachefile.tell() + previous_progress)
File "X/bitbake/lib/bb/cache.py", line 751, in progress
bb.event.fire(bb.event.CacheLoadProgress(current_progress, cachesize),
File "X/bitbake/lib/bb/event.py", line 234, in fire
fire_ui_handlers(event, d)
File "X/bitbake/lib/bb/event.py", line 210, in fire_ui_handlers
_ui_handlers[h].event.send(event)
File "X/bitbake/lib/bb/cooker.py", line 117, in send
str_event = codecs.encode(pickle.dumps(event), \'base64\').decode(\'utf-8\')
File "/usr/lib/python3.10/asyncio/sslproto.py", line 320, in __del__
_warn(f"unclosed transport {self!r}", ResourceWarning, source=self)
File "/usr/lib/python3.10/warnings.py", line 109, in _showwarnmsg
sw(msg.message, msg.category, msg.filename, msg.lineno,
File "X/bitbake/lib/bb/main.py", line 113, in _showwarning
warnlog.warning(s)
File "/usr/lib/python3.10/logging/__init__.py", line 1489, in warning
self._log(WARNING, msg, args, **kwargs)
File "/usr/lib/python3.10/logging/__init__.py", line 1624, in _log
self.handle(record)
File "/usr/lib/python3.10/logging/__init__.py", line 1634, in handle
self.callHandlers(record)
File "/usr/lib/python3.10/logging/__init__.py", line 1696, in callHandlers
hdlr.handle(record)
File "/usr/lib/python3.10/logging/__init__.py", line 968, in handle
self.emit(record)
File "X/bitbake/lib/bb/event.py", line 778, in emit
fire(record, None)
File "X/bitbake/lib/bb/event.py", line 234, in fire
fire_ui_handlers(event, d)
File "X/bitbake/lib/bb/event.py", line 197, in fire_ui_handlers
with bb.utils.lock_timeout(_thread_lock):
File "/usr/lib/python3.10/contextlib.py", line 135, in __enter__
return next(self.gen)
File "X/bitbake/lib/bb/utils.py", line 1888, in lock_timeout
bb.server.process.serverlog("Couldn\'t get the lock for 5 mins, timed out, exiting. %s" % traceback.format_stack())
or put in simpler terms, whilst sending an event(), an unrelated warning
message happens to be triggered from asyncio:
/usr/lib/python3.10/asyncio/sslproto.py:320: ResourceWarning: unclosed transport <asyncio.sslproto._SSLProtocolTransport object at 0x7f0e797d3100>
which triggers a second event() which can't be sent as we're already
in the critcal section and already hold the lock.
That warning is due to the version of asyncio used on Ubuntu 22.04 with
python 3.10 and that comined with timing issues explains why we don't
see it on other python versions or distros.
We can't handle the second event as the lock is there to serialise the
events. Instead, we queue the event and then process the queue later.
Add a new version of lock_timeout which allows us to handle the situation
more gracefully.
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 2c590ff1aff89d23b25ce808650f200013a1e6af)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
---
lib/bb/event.py | 10 +++++++++-
lib/bb/utils.py | 15 +++++++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/lib/bb/event.py b/lib/bb/event.py
index 952c85c0b..a12adbc93 100644
--- a/lib/bb/event.py
+++ b/lib/bb/event.py
@@ -194,7 +194,12 @@ def fire_ui_handlers(event, d):
ui_queue.append(event)
return
- with bb.utils.lock_timeout(_thread_lock):
+ with bb.utils.lock_timeout_nocheck(_thread_lock) as lock:
+ if not lock:
+ # If we can't get the lock, we may be recursively called, queue and return
+ ui_queue.append(event)
+ return
+
errors = []
for h in _ui_handlers:
#print "Sending event %s" % event
@@ -213,6 +218,9 @@ def fire_ui_handlers(event, d):
for h in errors:
del _ui_handlers[h]
+ while ui_queue:
+ fire_ui_handlers(ui_queue.pop(), d)
+
def fire(event, d):
"""Fire off an Event"""
diff --git a/lib/bb/utils.py b/lib/bb/utils.py
index da026fe5b..67e22f438 100644
--- a/lib/bb/utils.py
+++ b/lib/bb/utils.py
@@ -1857,6 +1857,9 @@ def path_is_descendant(descendant, ancestor):
# If we don't have a timeout of some kind and a process/thread exits badly (for example
# OOM killed) and held a lock, we'd just hang in the lock futex forever. It is better
# we exit at some point than hang. 5 minutes with no progress means we're probably deadlocked.
+# This function can still deadlock python since it can't signal the other threads to exit
+# (signals are handled in the main thread) and even os._exit() will wait on non-daemon threads
+# to exit.
@contextmanager
def lock_timeout(lock):
try:
@@ -1869,3 +1872,15 @@ def lock_timeout(lock):
finally:
lock.release()
signal.pthread_sigmask(signal.SIG_SETMASK, s)
+
+# A version of lock_timeout without the check that the lock was locked and a shorter timeout
+@contextmanager
+def lock_timeout_nocheck(lock):
+ try:
+ s = signal.pthread_sigmask(signal.SIG_BLOCK, signal.valid_signals())
+ l = lock.acquire(timeout=10)
+ yield l
+ finally:
+ if l:
+ lock.release()
+ signal.pthread_sigmask(signal.SIG_SETMASK, s)
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-03-07 13:55 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-07 13:54 [bitbake][styhead][2.10][PATCH 0/4] Patch review Steve Sakoman
2025-03-07 13:54 ` [bitbake][styhead][2.10][PATCH 1/4] utils: Print information about lock issue before exiting Steve Sakoman
2025-03-07 13:54 ` [bitbake][styhead][2.10][PATCH 2/4] utils: Tweak lock_timeout logic Steve Sakoman
2025-03-07 13:54 ` [bitbake][styhead][2.10][PATCH 3/4] utils: Add signal blocking for lock_timeout Steve Sakoman
2025-03-07 13:54 ` [bitbake][styhead][2.10][PATCH 4/4] event/utils: Avoid deadlock from lock_timeout() and recursive events Steve Sakoman
-- strict thread matches above, loose matches on Subject: below --
2024-10-30 16:01 [bitbake][styhead][2.10][PATCH 0/4] Patch review Steve Sakoman
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.