shallow: verify shallow file after taking lock
commit7839632167bc6ceef20f28bd046f7001493b070f
authorJeff King <peff@peff.net>
Sat, 15 Mar 2014 03:47:06 +0000 (14 23:47 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 17 Mar 2014 22:03:32 +0000 (17 15:03 -0700)
treea61644530405b976da4af5eed725a9d9930788ea
parent0179c945fce361c56b465e8a3f0fdf0962a816a1
shallow: verify shallow file after taking lock

Before writing the shallow file, we stat() the existing file
to make sure it has not been updated since our operation
began. However, we do not do so under a lock, so there is a
possible race:

  1. Process A takes the lock.

  2. Process B calls check_shallow_file_for_update and finds
     no update.

  3. Process A commits the lockfile.

  4. Process B takes the lock, then overwrite's process A's
     changes.

We can fix this by doing our check while we hold the lock.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
shallow.c