path: root/builtin/read-tree.c
diff options
authorMartin Ågren <>2018-05-09 20:55:39 (GMT)
committerJunio C Hamano <>2018-05-10 05:55:40 (GMT)
commit0fa5a2ed8d9f6d987f1ea479fe8ea56a26b89303 (patch)
tree19f1b29e8f3972f281423aa35c9d5711829f1e02 /builtin/read-tree.c
parentb227586831ed393e1d60629bfedcef01be4b9c22 (diff)
lock_file: move static locks into functions
Placing `struct lock_file`s on the stack used to be a bad idea, because the temp- and lockfile-machinery would keep a pointer into the struct. But after 076aa2cbd (tempfile: auto-allocate tempfiles on heap, 2017-09-05), we can safely have lockfiles on the stack. (This applies even if a user returns early, leaving a locked lock behind.) Each of these `struct lock_file`s is used from within a single function. Move them into the respective functions to make the scope clearer and drop the staticness. For good measure, I have inspected these sites and come to believe that they always release the lock, with the possible exception of bailing out using `die()` or `exit()` or by returning from a `cmd_foo()`. As pointed out by Jeff King, it would be bad if someone held on to a `struct lock_file *` for some reason. After some grepping, I agree with his findings: no-one appears to be doing that. After this commit, the remaining occurrences of "static struct lock_file" are locks that are used from within different functions. That is, they need to remain static. (Short of more intrusive changes like passing around pointers to non-static locks.) Signed-off-by: Martin Ågren <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'builtin/read-tree.c')
1 files changed, 1 insertions, 2 deletions
diff --git a/builtin/read-tree.c b/builtin/read-tree.c
index bf87a27..ebc43eb 100644
--- a/builtin/read-tree.c
+++ b/builtin/read-tree.c
@@ -107,8 +107,6 @@ static int git_read_tree_config(const char *var, const char *value, void *cb)
return git_default_config(var, value, cb);
-static struct lock_file lock_file;
int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
int i, stage = 0;
@@ -116,6 +114,7 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
struct tree_desc t[MAX_UNPACK_TREES];
struct unpack_trees_options opts;
int prefix_set = 0;
+ struct lock_file lock_file = LOCK_INIT;
const struct option read_tree_options[] = {
{ OPTION_CALLBACK, 0, "index-output", NULL, N_("file"),
N_("write resulting index to <file>"),