summaryrefslogtreecommitdiff
path: root/src/dbinc/shqueue.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/dbinc/shqueue.h')
-rw-r--r--src/dbinc/shqueue.h13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/dbinc/shqueue.h b/src/dbinc/shqueue.h
index 22464462..20e0fae7 100644
--- a/src/dbinc/shqueue.h
+++ b/src/dbinc/shqueue.h
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 2012 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015 Oracle and/or its affiliates. All rights reserved.
*
* $Id$
*/
@@ -140,6 +140,17 @@ struct { \
((struct type *)(((u_int8_t *)(elm)) + (elm)->field.sle_next)))
/*
+ * __SH_LIST_WAS_EMPTY is private API. SH_LIST_FIRST is not thread-safe;
+ * the slh_first field could be evaluated multiple times if the optimizer
+ * does not eliminate the second load. __SH_LIST_WAS_EMPTY tests whether a
+ * prior call of SH_LIST_FIRSTP occurred while the list was empty; i.e., its
+ * relative offset was -1. It is thread-safe to call SH_LIST_FIRSTP and then
+ * test the resulting pointer with __SH_LIST_WAS_EMPTY.
+ */
+#define __SH_LIST_WAS_EMPTY(head, ptr) \
+ ((u_int8_t *)(ptr) == (((u_int8_t *)(head)) + (-1)))
+
+ /*
*__SH_LIST_PREV_OFF is private API. It calculates the address of
* the elm->field.sle_next member of a SH_LIST structure. All offsets
* between elements are relative to that point in SH_LIST structures.