[PATCH] dtrace: Use deterministic temp file creation for all temp files

Gioele Barabucci gioele@svario.it
Mon Feb 27 15:59:58 GMT 2023


On 27/02/23 16:49, Florian Weimer wrote:
>> +def mktemp_determ(sources, suffix):
>> +    # for reproducible-builds purposes, use a predictable tmpfile path
>> +    sha = hashlib.sha256()
>> +    for source in sources:
>> +        sha.update(source.encode('utf-8'))
>> +    fname = ".dtrace-temp." + sha.hexdigest()[:8] + suffix
>> +    tries = 0
>> +    while True:
>> +        tries += 1
>> +        if tries > 100: # if file exists due to previous crash or whatever
>> +            raise Exception("cannot create temporary file \""+fname+"\"")
>> +        try:
>> +            wxmode = 'x' if sys.version_info > (3,0) else 'wx'
>> +            fdesc = open(fname, mode=wxmode)
>> +            break
>> +        except FileExistsError:
>> +            time.sleep(0.1) # vague estimate of elapsed time for concurrent identical gcc job
>> +            pass # Try again
>> +
>> +    return fdesc, fname
> 
> This looks like creating a file with a suitable name may block forward
> progress indefinitely?  Like from a previous crash of the tool?

Hi Florian,

yes, that's correct. This code will exit with a FileExistsError if a 
temporary file from a previous run are still around.

However this is not a new behavior: this piece of code is already in 
dtrace. What this patch does is using it for all intermediate tempfiles, 
not just for the final temporary files.

> It might be more robust to use a dedicated temporary directory and a
> predictable file name under that directory.

Doesn't this suffer from the same issue? If dtrace finds that 
predictable dir/file path it will exit (impeding a second run). Or am I 
missing something?

Regards,

-- 
Gioele Barabucci



More information about the Systemtap mailing list