On 10/27/2018 1:30 PM, Nguyễn Thái Ngọc Duy wrote:
Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
  preload-index.c | 15 ++-------------
  1 file changed, 2 insertions(+), 13 deletions(-)

diff --git a/preload-index.c b/preload-index.c
index 9e7152ab14..0e24886aca 100644
--- a/preload-index.c
+++ b/preload-index.c
@@ -7,17 +7,7 @@
  #include "fsmonitor.h"
  #include "config.h"
  #include "progress.h"
-
-#ifdef NO_PTHREADS
-static void preload_index(struct index_state *index,
-                         const struct pathspec *pathspec,
-                         unsigned int refresh_flags)
-{
-       ; /* nothing */
-}
-#else
-
-#include <pthread.h>
+#include "thread-utils.h"
/*
   * Mostly randomly chosen maximum thread counts: we
@@ -108,7 +98,7 @@ static void preload_index(struct index_state *index,
        struct thread_data data[MAX_PARALLEL];
        struct progress_data pd;
- if (!core_preload_index)
+       if (!HAVE_THREADS || !core_preload_index)
                return;
threads = index->cache_nr / THREAD_COST;
@@ -151,7 +141,6 @@ static void preload_index(struct index_state *index,
trace_performance_leave("preload index");
  }
-#endif
int read_index_preload(struct index_state *index,
                       const struct pathspec *pathspec,



In the theory that code speaks louder than comments, here is the patch I used when testing out the idea of getting rid of NO_PTHREADS:


 git diff head~1 preload-index.c
diff --git a/preload-index.c b/preload-index.c
index 9e7152ab14..266bc9d8d7 100644
--- a/preload-index.c
+++ b/preload-index.c
@@ -7,17 +7,7 @@
 #include "fsmonitor.h"
 #include "config.h"
 #include "progress.h"
-
-#ifdef NO_PTHREADS
-static void preload_index(struct index_state *index,
-                         const struct pathspec *pathspec,
-                         unsigned int refresh_flags)
-{
-       ; /* nothing */
-}
-#else
-
-#include <pthread.h>
+#include "thread-utils.h"

 /*
  * Mostly randomly chosen maximum thread counts: we
@@ -104,7 +94,7 @@ static void preload_index(struct index_state *index,
                          const struct pathspec *pathspec,
                          unsigned int refresh_flags)
 {
-       int threads, i, work, offset;
+       int cpus, threads, i, work, offset;
        struct thread_data data[MAX_PARALLEL];
        struct progress_data pd;

@@ -114,6 +104,9 @@ static void preload_index(struct index_state *index,
        threads = index->cache_nr / THREAD_COST;
if ((index->cache_nr > 1) && (threads < 2) && git_env_bool("GIT_TEST_PRELOAD_INDEX", 0))
                threads = 2;
+       cpus = online_cpus();
+       if (threads > cpus)
+               threads = cpus;
        if (threads < 2)
                return;
        trace_performance_enter();
@@ -151,7 +144,6 @@ static void preload_index(struct index_state *index,

        trace_performance_leave("preload index");
 }
-#endif

 int read_index_preload(struct index_state *index,
                       const struct pathspec *pathspec,

Reply via email to