grep: enable threading with -p and -W using lazy attribute lookup
[gitweb.git] / builtin / grep.c
index 988ea1d3324d6e32fcfd3b97da0fad5ae41b592c..6474eed19e704cc896f996bb5fb040807cfbb99b 100644 (file)
@@ -17,7 +17,6 @@
 #include "grep.h"
 #include "quote.h"
 #include "dir.h"
-#include "thread-utils.h"
 
 static char const * const grep_usage[] = {
        "git grep [options] [-e] <pattern> [<rev>...] [[--] <path>...]",
@@ -256,6 +255,7 @@ static void start_threads(struct grep_opt *opt)
 
        pthread_mutex_init(&grep_mutex, NULL);
        pthread_mutex_init(&read_sha1_mutex, NULL);
+       pthread_mutex_init(&grep_attr_mutex, NULL);
        pthread_cond_init(&cond_add, NULL);
        pthread_cond_init(&cond_write, NULL);
        pthread_cond_init(&cond_result, NULL);
@@ -303,6 +303,7 @@ static int wait_all(void)
 
        pthread_mutex_destroy(&grep_mutex);
        pthread_mutex_destroy(&read_sha1_mutex);
+       pthread_mutex_destroy(&grep_attr_mutex);
        pthread_cond_destroy(&cond_add);
        pthread_cond_destroy(&cond_write);
        pthread_cond_destroy(&cond_result);
@@ -1002,17 +1003,21 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
                opt.regflags |= REG_ICASE;
 
 #ifndef NO_PTHREADS
-       if (online_cpus() == 1 || !grep_threads_ok(&opt))
+       if (online_cpus() == 1)
                use_threads = 0;
+#else
+       use_threads = 0;
+#endif
+
+       opt.use_threads = use_threads;
 
+#ifndef NO_PTHREADS
        if (use_threads) {
                if (opt.pre_context || opt.post_context || opt.file_break ||
                    opt.funcbody)
                        skip_first_line = 1;
                start_threads(&opt);
        }
-#else
-       use_threads = 0;
 #endif
 
        compile_grep_patterns(&opt);