X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=servers%2Fslapd%2Fback-bdb%2Fback-bdb.h;h=6776e3b68c798450d270bb19e8367b0b63f75b0a;hb=202080dfa1c69002fca45f960cfcf69dd1541f98;hp=85361505793d6c80d410ba996cfbf11e03cf182b;hpb=dbad13ead28244c8e26477a42ae25daaabebb2fd;p=openldap diff --git a/servers/slapd/back-bdb/back-bdb.h b/servers/slapd/back-bdb/back-bdb.h index 8536150579..6776e3b68c 100644 --- a/servers/slapd/back-bdb/back-bdb.h +++ b/servers/slapd/back-bdb/back-bdb.h @@ -58,6 +58,28 @@ LDAP_BEGIN_DECL #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 */ @@ -128,13 +150,14 @@ typedef struct bdb_cache { 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; @@ -154,6 +177,10 @@ struct bdb_db_info { 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; @@ -197,7 +224,7 @@ struct bdb_info { 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; @@ -208,6 +235,12 @@ struct bdb_info { 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 @@ -223,6 +256,7 @@ struct bdb_info { #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; @@ -232,8 +266,8 @@ struct bdb_lock_info { 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 */ }; @@ -273,21 +307,12 @@ struct bdb_op_info { ((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