about summary refs log tree commit diff
path: root/db2/db_int.h
diff options
context:
space:
mode:
Diffstat (limited to 'db2/db_int.h')
-rw-r--r--db2/db_int.h141
1 files changed, 73 insertions, 68 deletions
diff --git a/db2/db_int.h b/db2/db_int.h
index 92a3817764..0016240e70 100644
--- a/db2/db_int.h
+++ b/db2/db_int.h
@@ -4,14 +4,15 @@
  * Copyright (c) 1996, 1997, 1998
  *	Sleepycat Software.  All rights reserved.
  *
- *	@(#)db_int.h.src	10.62 (Sleepycat) 5/23/98
+ *	@(#)db_int.h	10.77 (Sleepycat) 1/3/99
  */
 
 #ifndef _DB_INTERNAL_H_
 #define	_DB_INTERNAL_H_
 
-#include <db.h>				/* Standard DB include file. */
+#include "db.h"				/* Standard DB include file. */
 #include "queue.h"
+#include "shqueue.h"
 
 /*******************************************************
  * General purpose constants and macros.
@@ -75,27 +76,7 @@
 #define	R_ADDR(base, offset)	((void *)((u_int8_t *)((base)->addr) + offset))
 #define	R_OFFSET(base, p)	((u_int8_t *)(p) - (u_int8_t *)(base)->addr)
 
-/* Free and free-string macros that overwrite memory. */
-#ifdef DIAGNOSTIC
-#undef	FREE
-#define	FREE(p, len) {							\
-	memset(p, 0xff, len);						\
-	__db_free(p);							\
-}
-#undef	FREES
-#define	FREES(p) {							\
-	FREE(p, strlen(p));						\
-}
-#else
-#undef	FREE
-#define	FREE(p, len) {							\
-	__db_free(p);							\
-}
-#undef	FREES
-#define	FREES(p) {							\
-	__db_free(p);							\
-}
-#endif
+#define	DB_DEFAULT	0x000000	/* No flag was specified. */
 
 /* Structure used to print flag values. */
 typedef struct __fn {
@@ -111,25 +92,29 @@ typedef struct __fn {
 #define	LF_CLR(f)	(flags &= ~(f))
 #define	LF_ISSET(f)	(flags & (f))
 
+/*
+ * Panic check:
+ * All interfaces check the panic flag, if it's set, the tree is dead.
+ */
+#define	DB_PANIC_CHECK(dbp) {						\
+	if ((dbp)->dbenv != NULL && (dbp)->dbenv->db_panic != 0)	\
+		return (DB_RUNRECOVERY);				\
+}
+
 /* Display separator string. */
 #undef	DB_LINE
 #define	DB_LINE "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="
 
-/* Global variables. */
-typedef struct __db_globals {
-	int db_mutexlocks;		/* DB_MUTEXLOCKS */
-	int db_region_anon;		/* DB_REGION_ANON, DB_REGION_NAME */
-	int db_region_init;		/* DB_REGION_INIT */
-	int db_tsl_spins;		/* DB_TSL_SPINS */
-	int db_pageyield;		/* DB_PAGEYIELD */
-} DB_GLOBALS;
-extern	DB_GLOBALS	__db_global_values;
-#define	DB_GLOBAL(v)	__db_global_values.v
-
 /* Unused, or not-used-yet variable.  "Shut that bloody compiler up!" */
 #define	COMPQUIET(n, v)	(n) = (v)
 
 /*
+ * Purify and similar run-time tools complain about unitialized reads/writes
+ * for structure fields whose only purpose is padding.
+ */
+#define	UMRW(v)		(v) = 0
+
+/*
  * Win16 needs specific syntax on callback functions.  Nobody else cares.
  */
 #ifndef	DB_CALLBACK
@@ -155,8 +140,6 @@ extern	DB_GLOBALS	__db_global_values;
  *******************************************************/
 typedef unsigned char tsl_t;
 
-
-
 /*
  * !!!
  * Various systems require different alignments for mutexes (the worst we've
@@ -204,21 +187,6 @@ typedef struct _db_mutex_t {
 	if (F_ISSET(dbp, DB_AM_THREAD))					\
 	    (void)__db_mutex_unlock((db_mutex_t *)(dbp)->mutexp, -1);
 
-/* Btree/recno local statistics structure. */
-struct __db_bt_lstat;	typedef struct __db_bt_lstat DB_BTREE_LSTAT;
-struct __db_bt_lstat {
-	u_int32_t bt_freed;		/* Pages freed for reuse. */
-	u_int32_t bt_pfxsaved;		/* Bytes saved by prefix compression. */
-	u_int32_t bt_split;		/* Total number of splits. */
-	u_int32_t bt_rootsplit;		/* Root page splits. */
-	u_int32_t bt_fastsplit;		/* Fast splits. */
-	u_int32_t bt_added;		/* Items added. */
-	u_int32_t bt_deleted;		/* Items deleted. */
-	u_int32_t bt_get;		/* Items retrieved. */
-	u_int32_t bt_cache_hit;		/* Hits in fast-insert code. */
-	u_int32_t bt_cache_miss;	/* Misses in fast-insert code. */
-};
-
 /*******************************************************
  * Environment.
  *******************************************************/
@@ -250,6 +218,7 @@ typedef struct _rlayout {
 	int	   majver;		/* Major version number. */
 	int	   minver;		/* Minor version number. */
 	int	   patch;		/* Patch version number. */
+	int	   panic;		/* Region is dead. */
 #define	INVALID_SEGID	-1
 	int	   segid;		/* shmget(2) ID, or Win16 segment ID. */
 
@@ -262,9 +231,9 @@ typedef struct _rlayout {
  * we don't make the underlying VM unhappy.
  */
 #define	DB_VMPAGESIZE	(4 * 1024)
-#define	DB_ROUNDOFF(i) {						\
-	(i) += DB_VMPAGESIZE - 1;					\
-	(i) -= (i) % DB_VMPAGESIZE;					\
+#define	DB_ROUNDOFF(n, round) {						\
+	(n) += (round) - 1;						\
+	(n) -= (n) % (round);						\
 }
 
 /*
@@ -292,6 +261,7 @@ struct __db_reginfo {
 					   and mmap(2) is being used to map it
 					   into our address space. */
 	int	    segid;		/* shmget(2) ID, or Win16 segment ID. */
+	void	   *wnt_handle;		/* Win/NT HANDLE. */
 
 					/* Shared flags. */
 /*				0x0001	COMMON MASK with RLAYOUT structure. */
@@ -334,8 +304,8 @@ typedef struct __dbpginfo {
 #define	IS_ZERO_LSN(LSN)	((LSN).file == 0)
 
 /* Test if we need to log a change. */
-#define	DB_LOGGING(dbp)							\
-	(F_ISSET(dbp, DB_AM_LOGGING) && !F_ISSET(dbp, DB_AM_RECOVER))
+#define	DB_LOGGING(dbc)							\
+	(F_ISSET((dbc)->dbp, DB_AM_LOGGING) && !F_ISSET(dbc, DBC_RECOVER))
 
 #ifdef DIAGNOSTIC
 /*
@@ -350,30 +320,30 @@ typedef struct __dbpginfo {
  * A data
  * F flags
  */
-#define	LOG_OP(D, T, O, K, A, F) {					\
+#define	LOG_OP(C, T, O, K, A, F) {					\
 	DB_LSN _lsn;							\
 	DBT _op;							\
-	if (DB_LOGGING((D))) {						\
+	if (DB_LOGGING((C))) {						\
 		memset(&_op, 0, sizeof(_op));				\
 		_op.data = O;						\
 		_op.size = strlen(O) + 1;				\
-		(void)__db_debug_log((D)->dbenv->lg_info,		\
-		    T, &_lsn, 0, &_op, (D)->log_fileid, K, A, F);	\
+		(void)__db_debug_log((C)->dbp->dbenv->lg_info,		\
+		    T, &_lsn, 0, &_op, (C)->dbp->log_fileid, K, A, F);	\
 	}								\
 }
 #ifdef DEBUG_ROP
-#define	DEBUG_LREAD(D, T, O, K, A, F)	LOG_OP(D, T, O, K, A, F)
+#define	DEBUG_LREAD(C, T, O, K, A, F)	LOG_OP(C, T, O, K, A, F)
 #else
-#define	DEBUG_LREAD(D, T, O, K, A, F)
+#define	DEBUG_LREAD(C, T, O, K, A, F)
 #endif
 #ifdef DEBUG_WOP
-#define	DEBUG_LWRITE(D, T, O, K, A, F)	LOG_OP(D, T, O, K, A, F)
+#define	DEBUG_LWRITE(C, T, O, K, A, F)	LOG_OP(C, T, O, K, A, F)
 #else
-#define	DEBUG_LWRITE(D, T, O, K, A, F)
+#define	DEBUG_LWRITE(C, T, O, K, A, F)
 #endif
 #else
-#define	DEBUG_LREAD(D, T, O, K, A, F)
-#define	DEBUG_LWRITE(D, T, O, K, A, F)
+#define	DEBUG_LREAD(C, T, O, K, A, F)
+#define	DEBUG_LWRITE(C, T, O, K, A, F)
 #endif /* DIAGNOSTIC */
 
 /*******************************************************
@@ -393,10 +363,45 @@ struct __db_txn {
 	DB_LSN		last_lsn;	/* Lsn of last log write. */
 	u_int32_t	txnid;		/* Unique transaction id. */
 	size_t		off;		/* Detail structure within region. */
-	TAILQ_ENTRY(__db_txn) links;
+	TAILQ_ENTRY(__db_txn) links;	/* Links transactions off manager. */
+	TAILQ_HEAD(__kids, __db_txn) kids; /* Child transactions. */
+	TAILQ_ENTRY(__db_txn) klinks;	/* Links child transactions. */
+
+#define	TXN_MALLOC	0x01		/* Structure allocated by TXN system. */
+	u_int32_t	flags;
+};
+
+/*******************************************************
+ * Global variables.
+ *******************************************************/
+/*
+ * !!!
+ * Initialized in os/os_config.c, don't change this unless you change it
+ * as well.
+ */
+
+struct __rmname {
+	char *dbhome;
+	int rmid;
+	TAILQ_ENTRY(__rmname) links;
 };
 
-#include "os_func.h"
+typedef struct __db_globals {
+	int db_mutexlocks;		/* DB_MUTEXLOCKS */
+	int db_pageyield;		/* DB_PAGEYIELD */
+	int db_region_anon;		/* DB_REGION_ANON, DB_REGION_NAME */
+	int db_region_init;		/* DB_REGION_INIT */
+	int db_tsl_spins;		/* DB_TSL_SPINS */
+					/* XA: list of opened environments. */
+	TAILQ_HEAD(__db_envq, __db_env) db_envq;
+					/* XA: list of id to dbhome mappings. */
+	TAILQ_HEAD(__db_nameq, __rmname) db_nameq;
+} DB_GLOBALS;
+
+extern	DB_GLOBALS	__db_global_values;
+#define	DB_GLOBAL(v)	__db_global_values.v
+
+#include "os.h"
 #include "os_ext.h"
 
 #endif /* !_DB_INTERNAL_H_ */