+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
/* 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)))
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
}
/* 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. */