diff options
Diffstat (limited to 'src/dbinc/shqueue.h')
-rw-r--r-- | src/dbinc/shqueue.h | 13 |
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. |