<feed xmlns='http://www.w3.org/2005/Atom'>
<title>git/lockfile.h, branch v2.10.2</title>
<subtitle>Mirror of https://git.kernel.org/pub/scm/git/git.git/
</subtitle>
<id>https://git.shady.money/git/atom?h=v2.10.2</id>
<link rel='self' href='https://git.shady.money/git/atom?h=v2.10.2'/>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/'/>
<updated>2016-08-23T16:09:55Z</updated>
<entry>
<title>mingw: ensure temporary file handles are not inherited by child processes</title>
<updated>2016-08-23T16:09:55Z</updated>
<author>
<name>Ben Wijen</name>
<email>ben@wijen.net</email>
</author>
<published>2016-08-22T12:47:55Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=05d1ed6148305d299693000856e4971e9f642662'/>
<id>urn:sha1:05d1ed6148305d299693000856e4971e9f642662</id>
<content type='text'>
When the index is locked and child processes inherit the handle to
said lock and the parent process wants to remove the lock before the
child process exits, on Windows there is a problem: it won't work
because files cannot be deleted if a process holds a handle on them.
The symptom:

    Rename from 'xxx/.git/index.lock' to 'xxx/.git/index' failed.
    Should I try again? (y/n)

Spawning child processes with bInheritHandles==FALSE would not work
because no file handles would be inherited, not even the hStdXxx
handles in STARTUPINFO (stdin/stdout/stderr).

Opening every file with O_NOINHERIT does not work, either, as e.g.
git-upload-pack expects inherited file handles.

This leaves us with the only way out: creating temp files with the
O_NOINHERIT flag. This flag is Windows-specific, however. For our
purposes, it is equivalent to O_CLOEXEC (which does not exist on
Windows), so let's just open temporary files with the O_CLOEXEC flag and
map that flag to O_NOINHERIT on Windows.

As Eric Wong pointed out, we need to be careful to handle the case where
the Linux headers used to compile Git support O_CLOEXEC but the Linux
kernel used to run Git does not: it returns an EINVAL.

This fixes the test that we just introduced to demonstrate the problem.

Signed-off-by: Ben Wijen &lt;ben@wijen.net&gt;
Signed-off-by: Johannes Schindelin &lt;johannes.schindelin@gmx.de&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>lockfile: remove function "hold_lock_file_for_append"</title>
<updated>2015-08-28T18:32:01Z</updated>
<author>
<name>Ralf Thielow</name>
<email>ralf.thielow@gmail.com</email>
</author>
<published>2015-08-28T16:55:52Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=aae42e43c42911a3c260ae9fa8681e779c6d5943'/>
<id>urn:sha1:aae42e43c42911a3c260ae9fa8681e779c6d5943</id>
<content type='text'>
With 77b9b1d (add_to_alternates_file: don't add duplicate entries,
2015-08-10) the last caller of function "hold_lock_file_for_append"
has been removed, so we can remove the function as well.

Signed-off-by: Ralf Thielow &lt;ralf.thielow@gmail.com&gt;
Acked-by: Jeff King &lt;peff@peff.net&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>tempfile: a new module for handling temporary files</title>
<updated>2015-08-10T19:57:14Z</updated>
<author>
<name>Michael Haggerty</name>
<email>mhagger@alum.mit.edu</email>
</author>
<published>2015-08-10T09:47:41Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=1a9d15db25487bb3fc009a88375cc206a60e0e3b'/>
<id>urn:sha1:1a9d15db25487bb3fc009a88375cc206a60e0e3b</id>
<content type='text'>
A lot of work went into defining the state diagram for lockfiles and
ensuring correct, race-resistant cleanup in all circumstances.

Most of that infrastructure can be applied directly to *any* temporary
file. So extract a new "tempfile" module from the "lockfile" module.
Reimplement lockfile on top of tempfile.

Subsequent commits will add more users of the new module.

Signed-off-by: Michael Haggerty &lt;mhagger@alum.mit.edu&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>lockfile: add accessor get_lock_file_path()</title>
<updated>2015-08-10T19:57:14Z</updated>
<author>
<name>Michael Haggerty</name>
<email>mhagger@alum.mit.edu</email>
</author>
<published>2015-08-10T09:47:39Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=b4fb09e4da53bfc6c720337142af5db3204736d5'/>
<id>urn:sha1:b4fb09e4da53bfc6c720337142af5db3204736d5</id>
<content type='text'>
Signed-off-by: Michael Haggerty &lt;mhagger@alum.mit.edu&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>lockfile: add accessors get_lock_file_fd() and get_lock_file_fp()</title>
<updated>2015-08-10T19:57:14Z</updated>
<author>
<name>Michael Haggerty</name>
<email>mhagger@alum.mit.edu</email>
</author>
<published>2015-08-10T09:47:38Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=c99a4c2db3053e4fb6a43870f5c747f858b0f58f'/>
<id>urn:sha1:c99a4c2db3053e4fb6a43870f5c747f858b0f58f</id>
<content type='text'>
We are about to move those members, so change client code to read them
through accessor functions.

Signed-off-by: Michael Haggerty &lt;mhagger@alum.mit.edu&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>lockfile: move documentation to lockfile.h and lockfile.c</title>
<updated>2015-08-10T19:57:14Z</updated>
<author>
<name>Michael Haggerty</name>
<email>mhagger@alum.mit.edu</email>
</author>
<published>2015-08-10T09:47:36Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=2db69de81deea4682579d0b9e6da40b4e9558c05'/>
<id>urn:sha1:2db69de81deea4682579d0b9e6da40b4e9558c05</id>
<content type='text'>
Rearrange/rewrite it somewhat to fit its new environment.

Signed-off-by: Michael Haggerty &lt;mhagger@alum.mit.edu&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>lockfile: allow file locking to be retried with a timeout</title>
<updated>2015-05-14T21:51:08Z</updated>
<author>
<name>Michael Haggerty</name>
<email>mhagger@alum.mit.edu</email>
</author>
<published>2015-05-11T10:35:25Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=044b6a9efecf9941073b99ced4cb2881b18aee62'/>
<id>urn:sha1:044b6a9efecf9941073b99ced4cb2881b18aee62</id>
<content type='text'>
Currently, there is only one attempt to lock a file. If it fails, the
whole operation fails.

But it might sometimes be advantageous to try acquiring a file lock a
few times before giving up. So add a new function,
hold_lock_file_for_update_timeout(), that allows a timeout to be
specified. Make hold_lock_file_for_update() a thin wrapper around the
new function.

If timeout_ms is positive, then retry for at least that many
milliseconds to acquire the lock. On each failed attempt, use select()
to wait for a backoff time that increases quadratically (capped at 1
second) and has a random component to prevent two processes from
getting synchronized. If timeout_ms is negative, retry indefinitely.

In a moment we will switch to using the new function when locking
packed-refs.

Signed-off-by: Michael Haggerty &lt;mhagger@alum.mit.edu&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>lockfile: remove unable_to_lock_error</title>
<updated>2014-10-15T17:47:27Z</updated>
<author>
<name>Jonathan Nieder</name>
<email>jrnieder@gmail.com</email>
</author>
<published>2014-08-28T23:41:34Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=fb43bd1cd187bcd29312df3b0394a457d524906d'/>
<id>urn:sha1:fb43bd1cd187bcd29312df3b0394a457d524906d</id>
<content type='text'>
The former caller uses unable_to_lock_message now.

Signed-off-by: Jonathan Nieder &lt;jrnieder@gmail.com&gt;
Reviewed-by: Ronnie Sahlberg &lt;sahlberg@google.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>fdopen_lock_file(): access a lockfile using stdio</title>
<updated>2014-10-01T21:08:10Z</updated>
<author>
<name>Michael Haggerty</name>
<email>mhagger@alum.mit.edu</email>
</author>
<published>2014-10-01T11:14:47Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=013870cd2cb1b0d6719a7a9123e126a62426520b'/>
<id>urn:sha1:013870cd2cb1b0d6719a7a9123e126a62426520b</id>
<content type='text'>
Add a new function, fdopen_lock_file(), which returns a FILE pointer
open to the lockfile. If a stream is open on a lock_file object, it is
closed using fclose() on commit, rollback, or close_lock_file().

This change will allow callers to use stdio to write to a lockfile
without having to muck around in the internal representation of the
lock_file object (callers will be rewritten in upcoming commits).

Signed-off-by: Michael Haggerty &lt;mhagger@alum.mit.edu&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>lockfile.h: extract new header file for the functions in lockfile.c</title>
<updated>2014-10-01T20:56:14Z</updated>
<author>
<name>Michael Haggerty</name>
<email>mhagger@alum.mit.edu</email>
</author>
<published>2014-10-01T10:28:42Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/git/commit/?id=697cc8efd944a32ca472337cd6640004c474b788'/>
<id>urn:sha1:697cc8efd944a32ca472337cd6640004c474b788</id>
<content type='text'>
Move the interface declaration for the functions in lockfile.c from
cache.h to a new file, lockfile.h. Add #includes where necessary (and
remove some redundant includes of cache.h by files that already
include builtin.h).

Move the documentation of the lock_file state diagram from lockfile.c
to the new header file.

Signed-off-by: Michael Haggerty &lt;mhagger@alum.mit.edu&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
</feed>
