]> granicus.if.org Git - gc/commitdiff
2010-10-12 Ivan Maidanski <ivmai@mail.ru>
authorivmai <ivmai>
Tue, 12 Oct 2010 05:46:27 +0000 (05:46 +0000)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 26 Jul 2011 17:06:55 +0000 (21:06 +0400)
* darwin_stop_world.c (GC_push_all_stacks): Fix "my_task" local
variable initialization (always call current_task()).
* pthread_support.c (GC_thr_init, GC_register_my_thread_inner):
Don't set thread's stop_info.stack_ptr value for Darwin.

ChangeLog
darwin_stop_world.c
include/private/darwin_stop_world.h
pthread_support.c

index 6cfe39f8de0671716c925bc6d180fca51e0c21c8..af072bb0403bdf81613d66eb0f57b6017b0f798a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2010-10-12  Ivan Maidanski <ivmai@mail.ru>
+
+       * darwin_stop_world.c (GC_push_all_stacks): Fix "my_task" local
+       variable initialization (always call current_task()).
+       * pthread_support.c (GC_thr_init, GC_register_my_thread_inner):
+       Don't set thread's stop_info.stack_ptr value for Darwin.
+
 2010-10-10  Ivan Maidanski <ivmai@mail.ru>
 
        * darwin_stop_world.c (GC_push_all_stacks): Rename "r", "me" local
        * win32_threads.c (GC_Thread_Rep.tm_in_use, GC_attached_thread,
        DllMain): Don't define if GC_NO_DLLMAIN.
        * win32_threads.c (GC_stop_world): Declare "i" and "max" local
-       vars only if not GC_NO_DLLMAIN (to suppress compiler warning).
+       variables only if not GC_NO_DLLMAIN (to suppress compiler
+       warning).
        * win32_threads.c (GC_mark_thread, start_mark_threads): Use
        CreateThread() instead of _beginthreadex() for WinCE.
        * win32_threads.c (MARK_THREAD_STACK_SIZE, WINCE_MAIN_STACK_SIZE):
        (define as "strtoul" for most targets except for LLP64/Win64).
        * misc.c (GC_init_inner): Use STRTOULL instead of atoi/atol()
        (cast the result to word type) to decode values of "GC_TRACE",
-       "GC_INITIAL_HEAP_SIZE", "GC_MAXIMUM_HEAP_SIZE" environment vars.
+       "GC_INITIAL_HEAP_SIZE", "GC_MAXIMUM_HEAP_SIZE" environment
+       variables.
 
 2009-06-12  Hans Boehm <Hans.Boehm@hp.com> (Really mostly George Talbot)
 
        corresponding compiler warning.
        * ptr_chck.c (GC_is_visible): cast int const to word type to
        prevent left shift overflow.
-       * os_dep.c: change the type of GC_mem_top_down global var
+       * os_dep.c: change the type of GC_mem_top_down global variable
        (containing a flag) to DWORD.
        * include/gc_config_macros.h: define GC_SOLARIS_THREADS if GC_THREADS
        is defined on SunOS x86_64.
        * backgraph.c: cast GC_gc_no value to unsigned short when
        assigned/compared to height_gc_no field of back_edges.
        * os_dep.c (GC_remove_protection): Add ARGSUSED.
-       * win32_threads.c (GC_thread_exit_proc): Remove unused local var.
+       * win32_threads.c (GC_thread_exit_proc): Remove unused local
+       variable.
        * mark.c (GC_check_dirty): Move declaration out of func body.
 
 2008-11-06  Hans Boehm <Hans.Boehm@hp.com>
index 0b6830f6b5eb32a6cba5fc8170f16d79a8882e97..a915d5f7428f30c8375ae9115732e4ece3b8c51e 100644 (file)
@@ -102,12 +102,12 @@ GC_INNER void GC_push_all_stacks(void)
   int i;
   kern_return_t kern_return;
   ptr_t lo, hi;
-  word total_size = 0;
+  task_t my_task = current_task();
   mach_port_t my_thread = mach_thread_self();
   GC_bool found_me = FALSE;
   int nthreads = 0;
+  word total_size = 0;
   mach_msg_type_number_t listcount = (mach_msg_type_number_t)THREAD_TABLE_SZ;
-  task_t my_task = 0; /* initialized to prevent a warning */
   thread_act_array_t act_list = 0;
 
   if (!GC_thr_initialized)
@@ -115,7 +115,6 @@ GC_INNER void GC_push_all_stacks(void)
 
   if (GC_query_task_threads) {
     /* Obtain the list of the threads from the kernel.  */
-    my_task = current_task();
     kern_return = task_threads(my_task, &act_list, &listcount);
     if (kern_return != KERN_SUCCESS)
       ABORT("task_threads failed");
index 787c357d1ddbb89aa48e78db88b44dd3a3afb3c1..ee60114488a0d1dc4f0a71e15403887812e8975b 100644 (file)
@@ -27,7 +27,7 @@
 
 struct thread_stop_info {
   mach_port_t mach_thread;
-  ptr_t stack_ptr; /* Valid only when stopped.  */
+  ptr_t stack_ptr; /* Valid only when thread is in a "blocked" state.   */
 };
 
 #endif
index f7da17270023d89ac2329cc46eb34eacb5d5dbf3..c28afc8efea8db863c15e6ba9d794c166c8ad8e1 100644 (file)
@@ -879,8 +879,9 @@ GC_INNER void GC_thr_init(void)
       GC_thread t = GC_new_thread(pthread_self());
 #     ifdef GC_DARWIN_THREADS
         t -> stop_info.mach_thread = mach_thread_self();
+#     else
+        t -> stop_info.stack_ptr = (ptr_t)(&dummy);
 #     endif
-      t -> stop_info.stack_ptr = (ptr_t)(&dummy);
       t -> flags = DETACHED | MAIN_THREAD;
     }
 
@@ -1284,8 +1285,9 @@ STATIC GC_thread GC_register_my_thread_inner(const struct GC_stack_base *sb,
       ABORT("Failed to allocate memory for thread registering.");
 #   ifdef GC_DARWIN_THREADS
       me -> stop_info.mach_thread = mach_thread_self();
+#   else
+      me -> stop_info.stack_ptr = sb -> mem_base;
 #   endif
-    me -> stop_info.stack_ptr = sb -> mem_base;
     me -> stack_end = sb -> mem_base;
     if (me -> stack_end == NULL)
       ABORT("Bad stack base in GC_register_my_thread");