You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.0 KiB
85 lines
2.0 KiB
/*-
|
|
* See the file LICENSE for redistribution information.
|
|
*
|
|
* Copyright (c) 1998, 1999
|
|
* Sleepycat Software. All rights reserved.
|
|
*
|
|
* @(#)debug.h 11.8 (Sleepycat) 11/8/99
|
|
*/
|
|
|
|
/*
|
|
* When running with #DIAGNOSTIC defined, we smash memory and do memory
|
|
* guarding with a special byte value.
|
|
*/
|
|
#define CLEAR_BYTE 0xdb
|
|
#define GUARD_BYTE 0xdc
|
|
|
|
/*
|
|
* DB assertions.
|
|
*/
|
|
#ifdef DIAGNOSTIC
|
|
#define DB_ASSERT(e) ((e) ? (void)0 : __db_assert(#e, __FILE__, __LINE__))
|
|
#else
|
|
#define DB_ASSERT(e) ((void)0)
|
|
#endif
|
|
|
|
/*
|
|
* Debugging macro to log operations.
|
|
* If DEBUG_WOP is defined, log operations that modify the database.
|
|
* If DEBUG_ROP is defined, log operations that read the database.
|
|
*
|
|
* D dbp
|
|
* T txn
|
|
* O operation (string)
|
|
* K key
|
|
* A data
|
|
* F flags
|
|
*/
|
|
#define LOG_OP(C, T, O, K, A, F) { \
|
|
DB_LSN __lsn; \
|
|
DBT __op; \
|
|
if (DB_LOGGING((C))) { \
|
|
memset(&__op, 0, sizeof(__op)); \
|
|
__op.data = O; \
|
|
__op.size = strlen(O) + 1; \
|
|
(void)CDB___db_debug_log((C)->dbp->dbenv, \
|
|
T, &__lsn, 0, &__op, (C)->dbp->log_fileid, K, A, F);\
|
|
} \
|
|
}
|
|
#ifdef DEBUG_ROP
|
|
#define DEBUG_LREAD(C, T, O, K, A, F) LOG_OP(C, T, O, K, A, F)
|
|
#else
|
|
#define DEBUG_LREAD(C, T, O, K, A, F)
|
|
#endif
|
|
#ifdef DEBUG_WOP
|
|
#define DEBUG_LWRITE(C, T, O, K, A, F) LOG_OP(C, T, O, K, A, F)
|
|
#else
|
|
#define DEBUG_LWRITE(C, T, O, K, A, F)
|
|
#endif
|
|
|
|
/*
|
|
* Hook for testing recovery at various places in the create/delete paths.
|
|
*/
|
|
#if CONFIG_TEST
|
|
#define DB_TEST_RECOVERY(dbp, val, ret, name) \
|
|
do { \
|
|
int __ret; \
|
|
PANIC_CHECK((dbp)->dbenv); \
|
|
if ((dbp)->dbenv->test_copy == (val)) { \
|
|
/* COPY the FILE */ \
|
|
(void)(dbp)->sync((dbp), 0); \
|
|
if ((__ret = __db_testcopy((dbp), (name))) != 0) \
|
|
(ret) = CDB___db_panic((dbp)->dbenv, __ret); \
|
|
} \
|
|
if ((dbp)->dbenv->test_abort == (val)) { \
|
|
/* ABORT the TXN */ \
|
|
(ret) = EINVAL; \
|
|
goto db_tr_err; \
|
|
} \
|
|
} while (0)
|
|
#define DB_TEST_RECOVERY_LABEL db_tr_err:
|
|
#else
|
|
#define DB_TEST_RECOVERY(dbp, val, ret, name)
|
|
#define DB_TEST_RECOVERY_LABEL
|
|
#endif
|