From cfabd38cfdd75e4fa34c7f83af3e607ba9f3a453 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Tue, 1 Mar 2022 11:47:01 -0500 Subject: [PATCH] PR28923: dtrace.in: add O_EXCL level exclusion on generated C source files Adding mode='x' or mode='wx' to the open() call on the temp .c file. Now a test like this survives without errors: for i in `seq 100` do python3 dtrace.in -o foo.out -G -s /dev/null & python2 dtrace.in -o foo.out -G -s /dev/null & done --- dtrace.in | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dtrace.in b/dtrace.in index 2e4cc4566..0c3d88722 100644 --- a/dtrace.in +++ b/dtrace.in @@ -23,6 +23,7 @@ import hashlib import os import sys +import time from shlex import split from subprocess import call from tempfile import mkstemp @@ -416,7 +417,14 @@ def main(): sha.update(s_filename.encode('utf-8')) sha.update(filename.encode('utf-8')) fname = ".dtrace-temp." + sha.hexdigest()[:8] + ".c" - fdesc = open(fname, mode='w') + while True: + try: + wxmode = 'x' if sys.version_info > (3,0) else 'wx' + fdesc = open(fname, mode=wxmode) + break + except: + time.sleep(0.1) # vague estimate of elapsed time for concurrent identical gcc job + pass # Try again providers.semaphore_write(fdesc) fdesc.close() cc1 = os.environ.get("CC", "gcc") -- 2.43.5