Open whlook opened 7 months ago
@whlook that's a great report, in particular the reproducer is very handy — thank you!
I have a pull request coming up for this — should be auto-linked below in a minute or two —, and I would like to share my extended version of your reproducer below:
import multiprocessing
def cleanup():
import os
import yapf
from yapf_third_party._ylib2to3.pgen2.driver import _generate_pickle_name
for i in ("Grammar.txt", "PatternGrammar.txt"):
filename = _generate_pickle_name(i)
print(f" Removing {filename}...")
os.remove(_generate_pickle_name(i))
def proc():
import yapf
if __name__ == "__main__":
max_parallelity = 30
for parallelity in range(2, max_parallelity + 1):
print("Cleaning up...")
cleanup_p = multiprocessing.Process(target=cleanup)
cleanup_p.start()
cleanup_p.join()
print(f"Testing for the race condition with {parallelity} processes...")
pp = []
for i in range(parallelity):
p = multiprocessing.Process(target=proc)
pp.append(p)
for p in pp:
p.start()
for p in pp:
p.join()
if any(p.exitcode != 0 for p in pp):
print(f"Done, race condition proven above, took {parallelity} processes.")
break
else:
print("Done, no luck crashing this time.")
Problems
Reproduction
rm -r ~/.cache/YAPF
run this python code: