diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-02-15 18:34:28 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-02-16 19:19:05 -0800 |
commit | 5f02d31597df35ca98e9080e12bfbb18dadadcbe (patch) | |
tree | 92dfdf56c3d4fcf08cc5e4568ea57aa28322fdb6 /builtin-grep.c | |
parent | b599672316ae0e0cf827e5e2cd6d3bb403d7b8cd (diff) | |
download | git-5f02d31597df35ca98e9080e12bfbb18dadadcbe.tar.gz |
Fix use of mutex in threaded grep
The program can decide at runtime not to use threading even if the support
is compiled in. In such a case, mutexes are not necessary and left
uninitialized. But the code incorrectly tried to take and release the
read_sha1_mutex unconditionally.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Acked-by: Fredrik Kuivinen <frekui@gmail.com>
Diffstat (limited to 'builtin-grep.c')
-rw-r--r-- | builtin-grep.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/builtin-grep.c b/builtin-grep.c index 26d4deb1cc..362122c432 100644 --- a/builtin-grep.c +++ b/builtin-grep.c @@ -408,15 +408,25 @@ static int pathspec_matches(const char **paths, const char *name, int max_depth) return 0; } +static void *lock_and_read_sha1_file(const unsigned char *sha1, enum object_type *type, unsigned long *size) +{ + void *data; + + if (use_threads) { + read_sha1_lock(); + data = read_sha1_file(sha1, type, size); + read_sha1_unlock(); + } else { + data = read_sha1_file(sha1, type, size); + } + return data; +} + static void *load_sha1(const unsigned char *sha1, unsigned long *size, const char *name) { enum object_type type; - char *data; - - read_sha1_lock(); - data = read_sha1_file(sha1, &type, size); - read_sha1_unlock(); + void *data = lock_and_read_sha1_file(sha1, &type, size); if (!data) error("'%s': unable to read %s", name, sha1_to_hex(sha1)); @@ -605,10 +615,7 @@ static int grep_tree(struct grep_opt *opt, const char **paths, void *data; unsigned long size; - read_sha1_lock(); - data = read_sha1_file(entry.sha1, &type, &size); - read_sha1_unlock(); - + data = lock_and_read_sha1_file(entry.sha1, &type, &size); if (!data) die("unable to read tree (%s)", sha1_to_hex(entry.sha1)); |