]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb/proto-bdb.h
don't dereference NULL pointers
[openldap] / servers / slapd / back-bdb / proto-bdb.h
index 34862d31909dda6d7a9c471290f18a590dfe5e6c..1f9335421b860bd065235155c7787d99e1258f74 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2000-2007 The OpenLDAP Foundation.
+ * Copyright 2000-2008 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -74,7 +74,7 @@ int bdb_back_init_cf( BackendInfo *bi );
 int
 bdb_db_cache(
     Backend    *be,
-    const char *name,
+    struct berval *name,
        DB **db );
 
 /*
@@ -84,7 +84,7 @@ bdb_db_cache(
 
 int bdb_dn2entry LDAP_P(( Operation *op, DB_TXN *tid,
        struct berval *dn, EntryInfo **e, int matched,
-       u_int32_t locker, DB_LOCK *lock ));
+       DB_LOCK *lock ));
 
 /*
  * dn2id.c
@@ -97,9 +97,10 @@ int bdb_dn2entry LDAP_P(( Operation *op, DB_TXN *tid,
 
 int bdb_dn2id(
        Operation *op,
-       DB_TXN *tid,
        struct berval *dn,
-       EntryInfo *ei );
+       EntryInfo *ei,
+       DB_TXN *txn,
+       DB_LOCK *lock );
 
 int bdb_dn2id_add(
        Operation *op,
@@ -120,22 +121,28 @@ int bdb_dn2id_children(
 
 int bdb_dn2idl(
        Operation *op,
-       u_int32_t locker,
-       Entry *e,
+       DB_TXN *txn,
+       struct berval *ndn,
+       EntryInfo *ei,
        ID *ids,
        ID *stack );
 
 #ifdef BDB_HIER
 #define bdb_dn2id_parent                       BDB_SYMBOL(dn2id_parent)
+#define bdb_dup_compare                                BDB_SYMBOL(dup_compare)
 #define bdb_fix_dn                                     BDB_SYMBOL(fix_dn)
 
 int bdb_dn2id_parent(
        Operation *op,
        DB_TXN *txn,
-       u_int32_t locker,
        EntryInfo *ei,
        ID *idp );
 
+int bdb_dup_compare(
+       DB *db,
+       const DBT *usrkey,
+       const DBT *curkey );
+
 int bdb_fix_dn( Entry *e, int checkit );
 #endif
 
@@ -167,7 +174,7 @@ char *ebcdic_dberror( int rc );
 
 int bdb_filter_candidates(
        Operation *op,
-       u_int32_t locker,
+       DB_TXN *txn,
        Filter  *f,
        ID *ids,
        ID *tmp,
@@ -201,7 +208,6 @@ int bdb_id2entry_delete(
 int bdb_id2entry(
        BackendDB *be,
        DB_TXN *tid,
-       u_int32_t locker,
        ID id,
        Entry **e);
 #endif
@@ -284,7 +290,7 @@ unsigned bdb_idl_search( ID *ids, ID id );
 int bdb_idl_fetch_key(
        BackendDB       *be,
        DB                      *db,
-       u_int32_t locker,
+       DB_TXN          *txn,
        DBT                     *key,
        ID                      *ids,
        DBC                     **saved_cursor,
@@ -327,17 +333,18 @@ int bdb_idl_append_one( ID *ids, ID id );
 /*
  * index.c
  */
-#define bdb_index_is_indexed           BDB_SYMBOL(index_is_indexed)
+#define bdb_index_mask                         BDB_SYMBOL(index_mask)
 #define bdb_index_param                                BDB_SYMBOL(index_param)
 #define bdb_index_values                       BDB_SYMBOL(index_values)
 #define bdb_index_entry                                BDB_SYMBOL(index_entry)
 #define bdb_index_recset                       BDB_SYMBOL(index_recset)
 #define bdb_index_recrun                       BDB_SYMBOL(index_recrun)
 
-extern int
-bdb_index_is_indexed LDAP_P((
+extern AttrInfo *
+bdb_index_mask LDAP_P((
        Backend *be,
-       AttributeDescription *desc ));
+       AttributeDescription *desc,
+       struct berval *name ));
 
 extern int
 bdb_index_param LDAP_P((
@@ -390,7 +397,7 @@ extern int
 bdb_key_read(
     Backend    *be,
        DB *db,
-       u_int32_t locker,
+       DB_TXN *txn,
     struct berval *k,
        ID *ids,
     DBC **saved_cursor,
@@ -411,7 +418,7 @@ bdb_key_change(
 #define bdb_next_id                                    BDB_SYMBOL(next_id)
 #define bdb_last_id                                    BDB_SYMBOL(last_id)
 
-int bdb_next_id( BackendDB *be, DB_TXN *tid, ID *id );
+int bdb_next_id( BackendDB *be, ID *id );
 int bdb_last_id( BackendDB *be, DB_TXN *tid );
 
 /*
@@ -442,10 +449,20 @@ int bdb_monitor_db_open( BackendDB *be );
 int bdb_monitor_db_close( BackendDB *be );
 int bdb_monitor_db_destroy( BackendDB *be );
 
+#ifdef BDB_MONITOR_IDX
+#define bdb_monitor_idx_add    BDB_SYMBOL(monitor_idx_add)
+int
+bdb_monitor_idx_add(
+       struct bdb_info         *bdb,
+       AttributeDescription    *desc,
+       slap_mask_t             type );
+#endif /* BDB_MONITOR_IDX */
+
 /*
  * cache.c
  */
 #define bdb_cache_entry_db_unlock      BDB_SYMBOL(cache_entry_db_unlock)
+#define bdb_cache_return_entry_rw      BDB_SYMBOL(cache_return_entry_rw)
 
 #define        bdb_cache_entryinfo_lock(e) \
        ldap_pvt_thread_mutex_lock( &(e)->bei_kids_mutex )
@@ -457,15 +474,8 @@ int bdb_monitor_db_destroy( BackendDB *be );
 /* What a mess. Hopefully the current cache scheme will stabilize
  * and we can trim out all of this stuff.
  */
-#if 0
 void bdb_cache_return_entry_rw( struct bdb_info *bdb, Entry *e,
        int rw, DB_LOCK *lock );
-#else
-#define bdb_cache_return_entry_rw( bdb, e, rw, lock ) \
-       bdb_cache_entry_db_unlock( bdb, lock )
-#define        bdb_cache_return_entry( bdb, lock ) \
-       bdb_cache_entry_db_unlock( bdb, lock )
-#endif
 #define bdb_cache_return_entry_r(bdb, e, l) \
        bdb_cache_return_entry_rw((bdb), (e), 0, (l))
 #define bdb_cache_return_entry_w(bdb, e, l) \
@@ -503,7 +513,7 @@ int bdb_cache_add(
        EntryInfo *pei,
        Entry   *e,
        struct berval *nrdn,
-       u_int32_t locker,
+       DB_TXN *txn,
        DB_LOCK *lock
 );
 int bdb_cache_modrdn(
@@ -512,19 +522,19 @@ int bdb_cache_modrdn(
        struct berval *nrdn,
        Entry   *new,
        EntryInfo *ein,
-       u_int32_t locker,
+       DB_TXN *txn,
        DB_LOCK *lock
 );
 int bdb_cache_modify(
        struct bdb_info *bdb,
        Entry *e,
        Attribute *newAttrs,
-       u_int32_t locker,
+       DB_TXN *txn,
        DB_LOCK *lock
 );
 int bdb_cache_find_ndn(
        Operation *op,
-       DB_TXN  *txn,
+       DB_TXN *txn,
        struct berval   *ndn,
        EntryInfo       **res
 );
@@ -532,27 +542,28 @@ EntryInfo * bdb_cache_find_info(
        struct bdb_info *bdb,
        ID id
 );
+
+#define        ID_LOCKED       1
+#define        ID_NOCACHE      2
 int bdb_cache_find_id(
        Operation *op,
        DB_TXN  *tid,
        ID              id,
        EntryInfo **eip,
-       int     islocked,
-       u_int32_t       locker,
+       int     flag,
        DB_LOCK         *lock
 );
 int
 bdb_cache_find_parent(
        Operation *op,
        DB_TXN *txn,
-       u_int32_t       locker,
        ID id,
        EntryInfo **res
 );
 int bdb_cache_delete(
        struct bdb_info *bdb,
        Entry   *e,
-       u_int32_t locker,
+       DB_TXN *txn,
        DB_LOCK *lock
 );
 void bdb_cache_delete_cleanup(
@@ -572,7 +583,7 @@ int hdb_cache_load(
 #define bdb_cache_entry_db_relock              BDB_SYMBOL(cache_entry_db_relock)
 int bdb_cache_entry_db_relock(
        struct bdb_info *bdb,
-       u_int32_t locker,
+       DB_TXN *txn,
        EntryInfo *ei,
        int rw,
        int tryOnly,
@@ -582,20 +593,10 @@ int bdb_cache_entry_db_unlock(
        struct bdb_info *bdb,
        DB_LOCK *lock );
 
-#ifdef BDB_REUSE_LOCKERS
-
-#define bdb_locker_id                          BDB_SYMBOL(locker_id)
-int bdb_locker_id( Operation *op, DB_ENV *env, u_int32_t *locker );
-
-#define        LOCK_ID_FREE(env, locker)       ((void)0)
-#define        LOCK_ID(env, locker)    bdb_locker_id(op, env, locker)
-
-#else
-
-#define        LOCK_ID_FREE(env, locker)       XLOCK_ID_FREE(env, locker)
-#define        LOCK_ID(env, locker)            XLOCK_ID(env, locker)
-
-#endif
+#define bdb_reader_get                         BDB_SYMBOL(reader_get)
+#define bdb_reader_flush                       BDB_SYMBOL(reader_flush)
+int bdb_reader_get( Operation *op, DB_ENV *env, DB_TXN **txn );
+void bdb_reader_flush( DB_ENV *env );
 
 /*
  * trans.c
@@ -629,7 +630,6 @@ bdb_trans_backoff( int num_retries );
 #define bdb_tool_entry_put             BDB_SYMBOL(tool_entry_put)
 #define bdb_tool_entry_reindex         BDB_SYMBOL(tool_entry_reindex)
 #define bdb_tool_dn2id_get             BDB_SYMBOL(tool_dn2id_get)
-#define bdb_tool_id2entry_get          BDB_SYMBOL(tool_id2entry_get)
 #define bdb_tool_entry_modify          BDB_SYMBOL(tool_entry_modify)
 #define bdb_tool_idl_add               BDB_SYMBOL(tool_idl_add)
 
@@ -660,7 +660,6 @@ extern BI_tool_entry_get            bdb_tool_entry_get;
 extern BI_tool_entry_put               bdb_tool_entry_put;
 extern BI_tool_entry_reindex           bdb_tool_entry_reindex;
 extern BI_tool_dn2id_get               bdb_tool_dn2id_get;
-extern BI_tool_id2entry_get            bdb_tool_id2entry_get;
 extern BI_tool_entry_modify            bdb_tool_entry_modify;
 
 int bdb_tool_idl_add( BackendDB *be, DB *db, DB_TXN *txn, DBT *key, ID id );