]> granicus.if.org Git - gc/commitdiff
Allow gctest and thread_leak_test with zero NTHREADS
authorIvan Maidanski <ivmai@mail.ru>
Wed, 9 Aug 2017 21:47:18 +0000 (00:47 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Wed, 16 Aug 2017 22:58:16 +0000 (01:58 +0300)
* tests/test.c [GC_PTHREADS || GC_WIN32_THREADS] (reverse_test_inner):
Do not call fork_a_thread() if NTHREADS is 0.
* tests/test.c (MAX_FINALIZED): Increase to be correct for the case of
NTHREADS is 0.
* tests/test.c [GC_PTHREADS] (main): Do not declare and do not use th,
i local variables if NTHREADS is 0.
* tests/thread_leak_test.c (NTHREADS): Do not define if already defined.
* tests/thread_leak_test.c (main):  Do not declare and do not use i,
code, t, thread_id local variables if NTHREADS is 0.

tests/test.c
tests/thread_leak_test.c

index cd2fcecc2f725230ae988b2669c871b4a8f4fb3a..0c9e18913b66930f3adb6d2fd057acb762a2722a 100644 (file)
@@ -728,7 +728,8 @@ void *GC_CALLBACK reverse_test_inner(void *data)
     check_ints(b,1,50);
     check_ints(a,1,49);
     for (i = 0; i < 60; i++) {
-#       if defined(GC_PTHREADS) || defined(GC_WIN32_THREADS)
+#       if (defined(GC_PTHREADS) || defined(GC_WIN32_THREADS)) \
+           && (NTHREADS > 0)
             if (i % 10 == 0) fork_a_thread();
 #       endif
         /* This maintains the invariant that a always points to a list of */
@@ -820,12 +821,12 @@ void GC_CALLBACK finalizer(void * obj, void * client_data)
 
 size_t counter = 0;
 
-# define MAX_FINALIZED (NTHREADS*4000)
+# define MAX_FINALIZED ((NTHREADS+1)*4000)
 
 # if !defined(MACOS)
   GC_FAR GC_word live_indicators[MAX_FINALIZED] = {0};
 # ifndef GC_LONG_REFS_NOT_NEEDED
-    GC_FAR void *live_long_refs[MAX_FINALIZED] = {  NULL };
+    GC_FAR void *live_long_refs[MAX_FINALIZED] = { NULL };
 # endif
 #else
   /* Too big for THINK_C. have to allocate it dynamically. */
@@ -2169,10 +2170,12 @@ void * thr_run_one_test(void * arg GC_ATTR_UNUSED)
 
 int main(void)
 {
-    pthread_t th[NTHREADS];
+#   if NTHREADS > 0
+      pthread_t th[NTHREADS];
+      int i;
+#   endif
     pthread_attr_t attr;
     int code;
-    int i;
 #   ifdef GC_IRIX_THREADS
         /* Force a larger stack to be preallocated      */
         /* Since the initial can't always grow later.   */
@@ -2222,19 +2225,23 @@ int main(void)
         GC_printf("Key creation failed %d\n", code);
         FAIL;
     }
-    for (i = 0; i < NTHREADS; ++i) {
-      if ((code = pthread_create(th+i, &attr, thr_run_one_test, 0)) != 0) {
-        GC_printf("Thread %d creation failed %d\n", i, code);
-        FAIL;
+#   if NTHREADS > 0
+      for (i = 0; i < NTHREADS; ++i) {
+        if ((code = pthread_create(th+i, &attr, thr_run_one_test, 0)) != 0) {
+          GC_printf("Thread %d creation failed %d\n", i, code);
+          FAIL;
+        }
       }
-    }
+#   endif
     run_one_test();
-    for (i = 0; i < NTHREADS; ++i) {
-      if ((code = pthread_join(th[i], 0)) != 0) {
-        GC_printf("Thread %d failed %d\n", i, code);
-        FAIL;
+#   if NTHREADS > 0
+      for (i = 0; i < NTHREADS; ++i) {
+        if ((code = pthread_join(th[i], 0)) != 0) {
+          GC_printf("Thread %d failed %d\n", i, code);
+          FAIL;
+        }
       }
-    }
+#   endif
     check_heap_stats();
     (void)fflush(stdout);
     (void)pthread_attr_destroy(&attr);
index 8fedbd15fcd095d7a7504008b686540203c6cdec..6cb7ab39ef6d0a171cdd717bd8add8ed2588433c 100644 (file)
 #   endif
 }
 
-#define NTHREADS 5
+#ifndef NTHREADS
+# define NTHREADS 5
+#endif
 
 int main(void) {
+# if NTHREADS > 0
     int i;
 #   ifdef GC_PTHREADS
       pthread_t t[NTHREADS];
@@ -51,11 +54,13 @@ int main(void) {
       DWORD thread_id;
 #   endif
     int code;
+# endif
 
     GC_set_find_leak(1); /* for new collect versions not compiled       */
                          /* with -DFIND_LEAK.                           */
     GC_INIT();
 
+# if NTHREADS > 0
     for (i = 0; i < NTHREADS; ++i) {
 #       ifdef GC_PTHREADS
           code = pthread_create(t + i, 0, test, 0);
@@ -81,6 +86,7 @@ int main(void) {
             exit(2);
         }
     }
+# endif
 
     CHECK_LEAKS();
     CHECK_LEAKS();