summaryrefslogtreecommitdiff
path: root/src/dbinc/region.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/dbinc/region.h')
-rw-r--r--src/dbinc/region.h27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/dbinc/region.h b/src/dbinc/region.h
index ac0ff16f..070aff5f 100644
--- a/src/dbinc/region.h
+++ b/src/dbinc/region.h
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998, 2012 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
*
* $Id$
*/
@@ -134,7 +134,10 @@ typedef enum {
REGION_TYPE_LOG,
REGION_TYPE_MPOOL,
REGION_TYPE_MUTEX,
- REGION_TYPE_TXN } reg_type_t;
+ REGION_TYPE_TXN,
+ /* This enum always must be the last, and is the largest valid type. */
+ REGION_TYPE_MAX = REGION_TYPE_TXN
+} reg_type_t;
#define INVALID_REGION_SEGID -1 /* Segment IDs are either shmget(2) or
* Win16 segment identifiers. They are
@@ -196,10 +199,10 @@ typedef struct __db_reg_env { /* SHARED */
/*
- * The mtx_regenv mutex protects the environment reference count and
- * memory allocation from the primary shared region (the crypto, thread
- * control block and replication implementations allocate memory from
- * the primary shared region).
+ * The mtx_regenv mutex protects the environment reference count,
+ * blob threshold and memory allocation from the primary shared region
+ * (the crypto, thread control block and replication implementations
+ * allocate memory from the primary shared region).
*
* The rest of the fields are initialized at creation time, and don't
* need mutex protection. The flags, op_timestamp and rep_timestamp
@@ -209,6 +212,7 @@ typedef struct __db_reg_env { /* SHARED */
*/
db_mutex_t mtx_regenv; /* Refcnt, region allocation mutex. */
u_int32_t refcnt; /* References to the environment. */
+ u_int32_t blob_threshold; /* Environment wide blob threshold. */
u_int32_t region_cnt; /* Number of REGIONs. */
roff_t region_off; /* Offset of region array */
@@ -227,6 +231,8 @@ typedef struct __db_reg_env { /* SHARED */
time_t op_timestamp; /* Timestamp for operations. */
time_t rep_timestamp; /* Timestamp for rep db handles. */
u_int32_t reg_panic; /* DB_REGISTER triggered panic */
+ u_int32_t failure_panic; /* Failchk or mutex lock saw a crash. */
+ char failure_symptom[DB_FAILURE_SYMPTOM_SIZE];
uintmax_t unused; /* The ALLOC_LAYOUT structure follows
* the REGENV structure in memory and
* contains uintmax_t fields. Force
@@ -308,11 +314,14 @@ struct __db_reginfo_t { /* __env_region_attach IN parameters. */
/*
* PANIC_ISSET, PANIC_CHECK:
- * Check to see if the DB environment is dead.
+ * Check to see if the DB environment is dead. If the environment is still
+ * attached to its regions, look in the REGENV. Otherwise, check whether
+ * the region had the panic state set when this even detached from it.
*/
#define PANIC_ISSET(env) \
- ((env) != NULL && (env)->reginfo != NULL && \
- ((REGENV *)(env)->reginfo->primary)->panic != 0 && \
+ ((env) != NULL && ((env)->reginfo != NULL ? \
+ ((REGENV *)(env)->reginfo->primary)->panic != 0 : \
+ F_ISSET(env, ENV_REMEMBER_PANIC)) && \
!F_ISSET((env)->dbenv, DB_ENV_NOPANIC))
#define PANIC_CHECK(env) \