[PATCH][autobuilder-helper][zeus 10/32] scripts/run-config: Ensure racing for the lockfile doesn't traceback


Richard Purdie
 

Traceback (most recent call last):
File "yocto-autobuilder-helper/scripts/run-config", line 116, in <module>
fcntl.flock(fileno, fcntl.LOCK_EX)
OSError: [Errno 22] Invalid argument

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
scripts/run-config | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/scripts/run-config b/scripts/run-config
index 9d8d48a..ed13ca0 100755
--- a/scripts/run-config
+++ b/scripts/run-config
@@ -111,15 +111,20 @@ if bttarball:
btlock = btdlpath + ".lock"
if not os.path.exists(os.path.dirname(btdlpath)):
os.makedirs(os.path.dirname(btdlpath), exist_ok=True)
- with open(btlock, 'a+') as lf:
- fileno = lf.fileno()
- fcntl.flock(fileno, fcntl.LOCK_EX)
- if not os.path.exists(btdlpath):
- if bttarball.startswith("/"):
- subprocess.check_call(["cp", bttarball, btdlpath])
- else:
- subprocess.check_call(["wget", "-O", btdlpath, bttarball])
- os.chmod(btdlpath, 0o775)
+ while True:
+ try:
+ with open(btlock, 'a+') as lf:
+ fileno = lf.fileno()
+ fcntl.flock(fileno, fcntl.LOCK_EX)
+ if not os.path.exists(btdlpath):
+ if bttarball.startswith("/"):
+ subprocess.check_call(["cp", bttarball, btdlpath])
+ else:
+ subprocess.check_call(["wget", "-O", btdlpath, bttarball])
+ os.chmod(btdlpath, 0o775)
+ except OSError:
+ # We raced with someone else, try again
+ pass
subprocess.check_call(["bash", btdlpath, "-d", btdir, "-y"])
btenv = glob.glob(btdir + "/environment-setup*")
# We either parse or wrap all our execution calls, rock and a hard place :(
--
2.25.1

Join yocto@lists.yoctoproject.org to automatically receive all group messages.