#define BDB_PAGESIZE 4096 /* BDB's original default */
#endif
+/* 4.6.18 redefines cursor->locker */
+#if DB_VERSION_FULL >= 0x04060012
+
+struct __db_locker {
+ u_int32_t id;
+};
+
+typedef struct __db_locker * BDB_LOCKER;
+
+extern int __lock_getlocker(DB_LOCKTAB *lt, u_int32_t locker, int create, DB_LOCKER **ret);
+
+#define CURSOR_SETLOCKER(cursor, id) cursor->locker = id
+#define CURSOR_GETLOCKER(cursor) cursor->locker
+#else
+
+typedef u_int32_t BDB_LOCKER;
+
+#define CURSOR_SETLOCKER(cursor, id) cursor->locker = id
+#define CURSOR_GETLOCKER(cursor) cursor->locker
+
+#endif
+
#define DEFAULT_CACHE_SIZE 1000
/* The default search IDL stack cache depth */
EntryInfo *c_lruhead; /* lru - add accessed entries here */
EntryInfo *c_lrutail; /* lru - rem lru entries from here */
EntryInfo c_dntree;
- int c_maxsize;
+ unsigned c_maxsize;
int c_cursize;
- int c_minfree;
+ unsigned c_minfree;
+ unsigned c_eimax;
int c_eiused; /* EntryInfo's in use */
int c_leaves; /* EntryInfo leaf nodes */
int c_purging;
- u_int32_t c_locker; /* used by lru cleaner */
+ BDB_LOCKER c_locker; /* used by lru cleaner */
ldap_pvt_thread_rdwr_t c_rwlock;
ldap_pvt_thread_mutex_t c_lru_mutex;
ldap_pvt_thread_mutex_t c_count_mutex;
DB *bdi_db;
};
+#ifdef LDAP_DEVEL
+#define BDB_MONITOR_IDX
+#endif /* LDAP_DEVEL */
+
typedef struct bdb_monitor_t {
void *bdm_cb;
struct berval bdm_nbase;
ID bi_lastid;
ldap_pvt_thread_mutex_t bi_lastid_mutex;
- int bi_idl_cache_max_size;
+ unsigned bi_idl_cache_max_size;
int bi_idl_cache_size;
Avlnode *bi_idl_tree;
bdb_idl_cache_entry_t *bi_idl_lru_head;
char *bi_db_config_path;
BerVarray bi_db_config;
bdb_monitor_t bi_monitor;
+
+#ifdef BDB_MONITOR_IDX
+ ldap_pvt_thread_mutex_t bi_idx_mutex;
+ Avlnode *bi_idx;
+#endif /* BDB_MONITOR_IDX */
+
int bi_flags;
#define BDB_IS_OPEN 0x01
#define BDB_HAS_CONFIG 0x02
#define bi_id2entry bi_databases[BDB_ID2ENTRY]
#define bi_dn2id bi_databases[BDB_DN2ID]
+
struct bdb_lock_info {
struct bdb_lock_info *bli_next;
ID bli_id;
struct bdb_op_info {
BackendDB* boi_bdb;
DB_TXN* boi_txn;
+ BDB_LOCKER boi_locker;
u_int32_t boi_err;
- u_int32_t boi_locker;
int boi_acl_cache;
struct bdb_lock_info *boi_locks; /* used when no txn */
};
((db)->open)(db, NULL, file, name, type, flags, mode)
#endif
-#endif
-
-/* 4.6.18 redefines cursor->locker */
+/* BDB 4.6.18 makes locker a struct instead of an int */
#if DB_VERSION_FULL >= 0x04060012
+#undef TXN_ID
+#define TXN_ID(txn) (txn)->locker
+#endif
-struct __db_locker {
- u_int32_t id;
-};
-
-#define CURSOR_SETLOCKER(cursor, id) \
- __lock_getlocker(cursor->dbp->dbenv->lk_handle, id, 0, &cursor->locker)
-#define CURSOR_GETLOCKER(cursor) cursor->locker->id
-#else
-#define CURSOR_SETLOCKER(cursor, id) cursor->locker = id
-#define CURSOR_GETLOCKER(cursor) cursor->locker
#endif
#ifndef DB_BUFFER_SMALL