diff options
Diffstat (limited to 'bitbake/lib/bb/utils.py')
-rw-r--r-- | bitbake/lib/bb/utils.py | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py index 0df522b372..8c79159573 100644 --- a/bitbake/lib/bb/utils.py +++ b/bitbake/lib/bb/utils.py | |||
@@ -1841,3 +1841,16 @@ def mkstemp(suffix=None, prefix=None, dir=None, text=False): | |||
1841 | else: | 1841 | else: |
1842 | prefix = tempfile.gettempprefix() + entropy | 1842 | prefix = tempfile.gettempprefix() + entropy |
1843 | return tempfile.mkstemp(suffix=suffix, prefix=prefix, dir=dir, text=text) | 1843 | return tempfile.mkstemp(suffix=suffix, prefix=prefix, dir=dir, text=text) |
1844 | |||
1845 | # If we don't have a timeout of some kind and a process/thread exits badly (for example | ||
1846 | # OOM killed) and held a lock, we'd just hang in the lock futex forever. It is better | ||
1847 | # we exit at some point than hang. 5 minutes with no progress means we're probably deadlocked. | ||
1848 | @contextmanager | ||
1849 | def lock_timeout(lock): | ||
1850 | held = lock.acquire(timeout=5*60) | ||
1851 | try: | ||
1852 | if not held: | ||
1853 | os._exit(1) | ||
1854 | yield held | ||
1855 | finally: | ||
1856 | lock.release() | ||