]> sourceware.org Git - systemtap.git/commitdiff
PR28923: dtrace.in: add O_EXCL level exclusion on generated C source files
authorFrank Ch. Eigler <fche@redhat.com>
Tue, 1 Mar 2022 16:47:01 +0000 (11:47 -0500)
committerFrank Ch. Eigler <fche@redhat.com>
Tue, 1 Mar 2022 16:47:01 +0000 (11:47 -0500)
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

index 2e4cc4566301125729c09a626e462275c918aeb2..0c3d88722b57140a395bf09331ef05c15d428524 100644 (file)
--- 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")
This page took 0.02594 seconds and 5 git commands to generate.