aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2021-11-18 13:48:04 +0000
committerSteve Sakoman <steve@sakoman.com>2022-11-15 04:12:17 -1000
commit30d42ef030d03e11322b6b05ea7bbb64ab3d6f21 (patch)
tree818aa8452df044c28dbe877b6a53b932a2af4d52
parent8ea8e443005ad92f4ad264d9abd9e90e33fb5c17 (diff)
downloadbitbake-30d42ef030d03e11322b6b05ea7bbb64ab3d6f21.tar.gz
utils: Handle lockfile filenames that are too long for filesystems
The fetcher mirror code can go crazy creating lock filenames which exceed the filesystem limits. When this happens, the code will loop/hang. Handle the filename too long exception correctly but also truncate lockfile lengths to under 256 since the worst case situation is lockfile overlap and lack of parallelism. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> (cherry picked from commit 63baf3440b16e41ac6601de21ced94a94bdf1509) Signed-off-by: Steve Sakoman <steve@sakoman.com>
-rw-r--r--lib/bb/utils.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/bb/utils.py b/lib/bb/utils.py
index 6592eb00d..210e535f0 100644
--- a/lib/bb/utils.py
+++ b/lib/bb/utils.py
@@ -461,6 +461,10 @@ def lockfile(name, shared=False, retry=True, block=False):
consider the possibility of sending a signal to the process to break
out - at which point you want block=True rather than retry=True.
"""
+ if len(name) > 255:
+ root, ext = os.path.splitext(name)
+ name = root[:255 - len(ext)] + ext
+
dirname = os.path.dirname(name)
mkdirhier(dirname)
@@ -497,7 +501,7 @@ def lockfile(name, shared=False, retry=True, block=False):
return lf
lf.close()
except OSError as e:
- if e.errno == errno.EACCES:
+ if e.errno == errno.EACCES or e.errno == errno.ENAMETOOLONG:
logger.error("Unable to acquire lock '%s', %s",
e.strerror, name)
sys.exit(1)