]> granicus.if.org Git - gc/commitdiff
2011-06-30 Ivan Maidanski <ivmai@mail.ru>
authorivmai <ivmai>
Thu, 30 Jun 2011 15:29:25 +0000 (15:29 +0000)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 26 Jul 2011 17:07:00 +0000 (21:07 +0400)
* pthread_support.c (GC_segment_is_thread_stack): Replace '&'
operator with '&&' one in conditional expressions.
* specific.c (remove_specific): Dereference "entry" local variable
only if it is non-NULL.
* include/gc.h (GC_NEW): Refine the comment (about the returned
value).

ChangeLog
include/gc.h
pthread_support.c
specific.c

index 54fe9318f697b40af8c511d5c521815610990b30..f5423602158b94462dcdd7f8947faa8f41faec06 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2011-06-30  Ivan Maidanski <ivmai@mail.ru>
+
+       * pthread_support.c (GC_segment_is_thread_stack): Replace '&'
+       operator with '&&' one in conditional expressions.
+       * specific.c (remove_specific): Dereference "entry" local variable
+       only if it is non-NULL.
+       * include/gc.h (GC_NEW): Refine the comment (about the returned
+       value).
+
 2011-06-15  Ivan Maidanski <ivmai@mail.ru>
 
        * include/gc_version.h, configure.ac, doc/README: Change to
index 3e3f56e3d01aa427b294510e3fdb363b29fab0a4..ae7d046fdf6a0f009b439c0bddb63113e8d13d2f 100644 (file)
@@ -717,7 +717,8 @@ GC_API void * GC_CALL GC_debug_realloc_replacement(void * /* object_addr */,
 /* The following are included because they are often convenient, and    */
 /* reduce the chance for a misspecified size argument.  But calls may   */
 /* expand to something syntactically incorrect if t is a complicated    */
-/* type expression.                                                     */
+/* type expression.  Note that, unlike C++ new operator, these ones     */
+/* may return NULL (if out of memory).                                  */
 #define GC_NEW(t)               ((t*)GC_MALLOC(sizeof(t)))
 #define GC_NEW_ATOMIC(t)        ((t*)GC_MALLOC_ATOMIC(sizeof(t)))
 #define GC_NEW_STUBBORN(t)      ((t*)GC_MALLOC_STUBBORN(sizeof(t)))
index 33e3792466aaf3cd527ad973fe42401082f64ec4..f9af3029dc0fa1c889f0eb29bec1ad8b69990a68 100644 (file)
@@ -652,9 +652,9 @@ STATIC void GC_remove_all_threads_but_me(void)
     GC_ASSERT(I_HOLD_LOCK());
 #   ifdef PARALLEL_MARK
       for (i = 0; i < GC_markers - 1; ++i) {
-        if (marker_sp[i] > lo & marker_sp[i] < hi) return TRUE;
+        if (marker_sp[i] > lo && marker_sp[i] < hi) return TRUE;
 #       ifdef IA64
-          if (marker_bsp[i] > lo & marker_bsp[i] < hi) return TRUE;
+          if (marker_bsp[i] > lo && marker_bsp[i] < hi) return TRUE;
 #       endif
       }
 #   endif
index cbeb23317c8fa9fa71603fd5d7caaa0d9146bada..98d86c3101fd1ddb5ec78f841a30d6565e0ac7c1 100644 (file)
@@ -82,8 +82,8 @@ void PREFIXED(remove_specific) (tsd * key) {
     }
     /* Invalidate qtid field, since qtids may be reused, and a later    */
     /* cache lookup could otherwise find this entry.                    */
-    entry -> qtid = INVALID_QTID;
     if (entry != NULL) {
+      entry -> qtid = INVALID_QTID;
       *link = entry -> next;
       /* Atomic! concurrent accesses still work.        */
       /* They must, since readers don't lock.           */