Hi, you have probably overseen my email :) . Please, I would like to get it fixed. Does anyone has a suggestion what to do with this bug? It looks like a one-line fix probably in builtin/worktree.c, but I have no idea how to do it. Sorry. Thank you, Marketa On 15/01/2019 15:03, Marketa Calabkova wrote: > Hello, > > I am writing to report a bug. The original report is from my colleague, I am also providing his suggestions. > > There is insufficient locking for worktree addition. Adding worktree may fail. > > The problem is that git reads the directory entries in $GIT_DIR/worktrees, > finds a worktree name that does not exist, tries to create it, and if an > error is returned adding the worktree fails. When multiple git processes > do this in parallel only one adds a worktree and the others fail. Git should > reread the directory and find a new name that does not exist when creating > the worktree directory fails because another git process already created it. > > I suppose adding PID in the tree name would mitigate the issue to the point it will be very unlikely to encounter. > > I need more than the tree in the temporary directory so using the temporary directory directly as a tree is out of question. > > to test: > > cd /dev/shm > mkdir gittest > cd gittest > git init gitrepo > cd gitrepo > git commit --allow-empty -m Empty > for n in $(seq 10000) ; do ( tmp=$(mktemp -d /dev/shm/gittest/test.XXXXXXXXXXX) ; mkdir $tmp/test ; git worktree add --detach $tmp/test ; ) & done > > (you should see many messages like: > fatal: could not create directory of '.git/worktrees/test284': File exists) > > Greetings, > Marketa > >
Attachment:
signature.asc
Description: OpenPGP digital signature