]> git.sur5r.net Git - openldap/commitdiff
Update of back-bdb2 to KDZ's new entry lock schema.
authorKurt Spanier <ksp@openldap.org>
Fri, 12 Feb 1999 12:13:03 +0000 (12:13 +0000)
committerKurt Spanier <ksp@openldap.org>
Fri, 12 Feb 1999 12:13:03 +0000 (12:13 +0000)
Fix of a back-bdb2 --> back-ldbm leakage (==> new bdb2-specific DB file suffix).

17 files changed:
servers/slapd/back-bdb2/add.c
servers/slapd/back-bdb2/back-bdb2.h
servers/slapd/back-bdb2/cache.c
servers/slapd/back-bdb2/dn2id.c
servers/slapd/back-bdb2/filterindex.c
servers/slapd/back-bdb2/id2children.c
servers/slapd/back-bdb2/id2entry.c
servers/slapd/back-bdb2/idl.c
servers/slapd/back-bdb2/index.c
servers/slapd/back-bdb2/modrdn.c
servers/slapd/back-bdb2/nextid.c
servers/slapd/back-bdb2/proto-back-bdb2.h
servers/slapd/back-bdb2/search.c
servers/slapd/back-ldbm/cache.c
servers/slapd/tools/ldif2id2children-bdb2.c
servers/slapd/tools/ldif2index-bdb2.c
servers/slapd/tools/ldif2ldbm-bdb2.c

index f7d3274e1ecb59d312ac19a5ba000dafc25d6171..50125c6ab76d6d4ce037f62b002baab2e03fb424 100644 (file)
@@ -23,7 +23,7 @@ bdb2i_back_add_internal(
        char            *pdn;
        Entry           *p = NULL;
        int                     rootlock = 0;
-       int                     rc = -1
+       int                     rc; 
 
        Debug(LDAP_DEBUG_ARGS, "==> bdb2i_back_add: %s\n", e->e_dn, 0, 0);
 
@@ -121,40 +121,19 @@ bdb2i_back_add_internal(
                ldap_pvt_thread_mutex_unlock(&li->li_add_mutex);
        }
 
-       /* acquire required reader/writer lock */
-       if (entry_rdwr_lock(e, 1)) {
-               if( p != NULL) {
-                       /* free parent and writer lock */
-                       bdb2i_cache_return_entry_w( &li->li_cache, p ); 
-               }
-
-               if ( rootlock ) {
-                       /* release root lock */
-                       ldap_pvt_thread_mutex_unlock(&li->li_root_mutex);
-               }
-
-               Debug( LDAP_DEBUG_ANY, "add: could not lock entry\n",
-                       0, 0, 0 );
-
-               entry_free(e);
-
-               send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, "", "" );
-               return( -1 );
-       }
-
        e->e_id = bdb2i_next_id( be );
 
        /*
-        * Try to add the entry to the cache, assign it a new dnid
-        * This should only fail if the entry already exists.
+        * Try to add the entry to the cache, assign it a new dnid.
         */
+       rc = bdb2i_cache_add_entry_rw( &li->li_cache, e, CACHE_WRITE_LOCK );
 
-       if ( bdb2i_cache_add_entry_lock( &li->li_cache, e, ENTRY_STATE_CREATING )
-                                                               != 0 ) {
+       if ( rc != 0 ) {
                if( p != NULL) {
                        /* free parent and writer lock */
                        bdb2i_cache_return_entry_w( &li->li_cache, p ); 
                }
+
                if ( rootlock ) {
                        /* release root lock */
                        ldap_pvt_thread_mutex_unlock(&li->li_root_mutex);
@@ -162,15 +141,24 @@ bdb2i_back_add_internal(
 
                Debug( LDAP_DEBUG_ANY, "cache_add_entry_lock failed\n", 0, 0,
                    0 );
+
+               /* return the id */
                bdb2i_next_id_return( be, e->e_id );
                 
-               entry_rdwr_unlock(e, 1);
+               /* free the entry */
                entry_free( e );
 
-               send_ldap_result( conn, op, LDAP_ALREADY_EXISTS, "", "" );
+               if(rc > 0) {
+                       send_ldap_result( conn, op, LDAP_ALREADY_EXISTS, "", "" );
+               } else {
+                       send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, "", "" );
+               }
+
                return( -1 );
        }
 
+       rc = -1;
+
        /*
         * add it to the id2children index for the parent
         */
@@ -231,8 +219,6 @@ return_results:;
                ldap_pvt_thread_mutex_unlock(&li->li_root_mutex);
        }
 
-       bdb2i_cache_set_state( &li->li_cache, e, 0 );
-
        /* free entry and writer lock */
        bdb2i_cache_return_entry_w( &li->li_cache, e ); 
 
index 715dfd6485c5fdd2a070a9426aac1f8a222cc785..3179819fb2cffb53873112e6185cf6eb060696e3 100644 (file)
@@ -20,7 +20,7 @@ LDAP_BEGIN_DECL
 
 #define SUBLEN                 3
 
-#define BDB2_SUFFIX     ".dbb"
+#define BDB2_SUFFIX     ".bdb2"
 
 
 /*
@@ -82,6 +82,9 @@ struct cache {
        ldap_pvt_thread_mutex_t c_mutex;
 };
 
+#define CACHE_READ_LOCK                1
+#define CACHE_WRITE_LOCK       2
+
 /* for the cache of open index files (re-used for txn) */
 struct dbcache {
        int                     dbc_refcnt;
index 2917f52e569dfebc4c1de851da79a91cd0b3e72f..9581ef5194be28d5e80c9d808a4736c4c6f8dc9b 100644 (file)
 
 #include "back-bdb2.h"
 
+/* LDBM backend specific entry info -- visible only to the cache */
+struct ldbm_entry_info {
+       ldap_pvt_thread_rdwr_t  lei_rdwr;       /* reader/writer lock */
+
+       /*
+        * remaining fields require backend cache lock to access
+        * These items are specific to the LDBM backend and should
+        * be hidden.
+        */
+       int             lei_state;      /* for the cache */
+#define CACHE_ENTRY_UNDEFINED  0
+#define CACHE_ENTRY_CREATING   1
+#define CACHE_ENTRY_READY              2
+#define CACHE_ENTRY_DELETED            3
+
+       int             lei_refcnt;     /* # threads ref'ing this entry */
+       struct entry    *lei_lrunext;   /* for cache lru list */
+       struct entry    *lei_lruprev;
+};
+#define LEI(e) ((struct ldbm_entry_info *) ((e)->e_private))
+
 static int     cache_delete_entry_internal(struct cache *cache, Entry *e);
 #ifdef LDAP_DEBUG
 static void    lru_print(struct cache *cache);
 #endif
 
-void
-bdb2i_cache_set_state( struct cache *cache, Entry *e, int state )
+static int
+cache_entry_rdwr_lock(Entry *e, int rw)
 {
-       /* set cache mutex */
-       ldap_pvt_thread_mutex_lock( &cache->c_mutex );
+       Debug( LDAP_DEBUG_ARGS, "entry_rdwr_%slock: ID: %ld\n",
+               rw ? "w" : "r", e->e_id, 0);
 
-       e->e_state = state;
+       if (rw)
+               return ldap_pvt_thread_rdwr_wlock(&LEI(e)->lei_rdwr);
+       else
+               return ldap_pvt_thread_rdwr_rlock(&LEI(e)->lei_rdwr);
+}
 
-       /* free cache mutex */
-       ldap_pvt_thread_mutex_unlock( &cache->c_mutex );
+static int
+cache_entry_rdwr_trylock(Entry *e, int rw)
+{
+       Debug( LDAP_DEBUG_ARGS, "entry_rdwr_%strylock: ID: %ld\n",
+               rw ? "w" : "r", e->e_id, 0);
+
+       if (rw)
+               return ldap_pvt_thread_rdwr_wtrylock(&LEI(e)->lei_rdwr);
+       else
+               return ldap_pvt_thread_rdwr_rtrylock(&LEI(e)->lei_rdwr);
 }
 
-#ifdef not_used
-static void
-cache_return_entry( struct cache *cache, Entry *e )
+static int
+cache_entry_rdwr_unlock(Entry *e, int rw)
 {
-       /* set cache mutex */
-       ldap_pvt_thread_mutex_lock( &cache->c_mutex );
+       Debug( LDAP_DEBUG_ARGS, "entry_rdwr_%sunlock: ID: %ld\n",
+               rw ? "w" : "r", e->e_id, 0);
 
-       if ( --e->e_refcnt == 0 && e->e_state == ENTRY_STATE_DELETED ) {
-               entry_free( e );
-       }
+       if (rw)
+               return ldap_pvt_thread_rdwr_wunlock(&LEI(e)->lei_rdwr);
+       else
+               return ldap_pvt_thread_rdwr_runlock(&LEI(e)->lei_rdwr);
+}
 
-       /* free cache mutex */
-       ldap_pvt_thread_mutex_unlock( &cache->c_mutex );
+static int
+cache_entry_rdwr_init(Entry *e)
+{
+       return ldap_pvt_thread_rdwr_init( &LEI(e)->lei_rdwr );
 }
-#endif
 
-static void
-cache_return_entry_rw( struct cache *cache, Entry *e, int rw )
+static int
+cache_entry_rdwr_destroy(Entry *e)
 {
-       Debug( LDAP_DEBUG_TRACE, "====> cache_return_entry_%s\n",
-               rw ? "w" : "r", 0, 0);
+       return ldap_pvt_thread_rdwr_destroy( &LEI(e)->lei_rdwr );
+}
 
-       /* set cache mutex */
-       ldap_pvt_thread_mutex_lock( &cache->c_mutex );
+static int
+cache_entry_private_init( Entry*e )
+{
+       struct ldbm_entry_info *lei;
 
-       entry_rdwr_unlock(e, rw);
+#ifdef LDAP_DEBUG
+       assert( e->e_private == NULL );
+#endif
 
-       if ( --e->e_refcnt == 0 && e->e_state == ENTRY_STATE_DELETED ) {
-               entry_free( e );
+       if( e->e_private != NULL ) {
+               /* this should never happen */
+               return 1;
        }
 
-       /* free cache mutex */
-       ldap_pvt_thread_mutex_unlock( &cache->c_mutex );
+       e->e_private = ch_calloc(1, sizeof(struct ldbm_entry_info));
+
+       if( cache_entry_rdwr_init( e ) != 0 ) {
+               free( LEI(e) );
+               e->e_private = NULL;
+               return 1;
+       } 
+
+       return 0;
 }
 
-void
-bdb2i_cache_return_entry_r( struct cache *cache, Entry *e )
+static int
+cache_entry_private_destroy( Entry*e )
 {
-       cache_return_entry_rw(cache, e, 0);
+       struct ldbm_entry_info *lei;
+
+#ifdef LDAP_DEBUG
+       assert( e->e_private );
+#endif
+
+       cache_entry_rdwr_destroy( e );
+
+       free( e->e_private );
+       e->e_private = NULL;
+       return 0;
 }
 
 void
-bdb2i_cache_return_entry_w( struct cache *cache, Entry *e )
+bdb2i_cache_return_entry_rw( struct cache *cache, Entry *e, int rw )
 {
-       cache_return_entry_rw(cache, e, 1);
-}
+       /* set cache mutex */
+       ldap_pvt_thread_mutex_lock( &cache->c_mutex );
+
+#ifdef LDAP_DEBUG
+       assert( e->e_private );
+#endif
+
+       cache_entry_rdwr_unlock(e, rw);
+
+       LEI(e)->lei_refcnt--;
+
+       if ( LEI(e)->lei_state == CACHE_ENTRY_CREATING ) {
+               Debug( LDAP_DEBUG_TRACE,
+                       "====> bdb2i_cache_return_entry_%s( %ld ): created (%d)\n",
+                       rw ? "w" : "r", e->e_id, LEI(e)->lei_refcnt );
+
+               LEI(e)->lei_state = CACHE_ENTRY_READY;
+
+       } else if ( LEI(e)->lei_state == CACHE_ENTRY_DELETED ) {
+               if( LEI(e)->lei_refcnt > 0 ) {
+                       Debug( LDAP_DEBUG_TRACE,
+                       "====> bdb2i_cache_return_entry_%s( %ld ): delete pending (%d)\n",
+                               rw ? "w" : "r", e->e_id, LEI(e)->lei_refcnt );
 
+               } else {
+                       Debug( LDAP_DEBUG_TRACE,
+                               "====> bdb2i_cache_return_entry_%s( %ld ): deleted (%d)\n",
+                               rw ? "w" : "r", e->e_id, LEI(e)->lei_refcnt );
+
+                       cache_entry_private_destroy( e );
+                       entry_free( e );
+               }
+
+       } else {
+               Debug( LDAP_DEBUG_TRACE,
+                       "====> bdb2i_cache_return_entry_%s( %ld ): returned (%d)\n",
+                       rw ? "w" : "r", e->e_id, LEI(e)->lei_refcnt);
+       }
+
+       /* free cache mutex */
+       ldap_pvt_thread_mutex_unlock( &cache->c_mutex );
+}
 
 #define LRU_DELETE( cache, e ) { \
-       if ( e->e_lruprev != NULL ) { \
-               e->e_lruprev->e_lrunext = e->e_lrunext; \
+       if ( LEI(e)->lei_lruprev != NULL ) { \
+               LEI(LEI(e)->lei_lruprev)->lei_lrunext = LEI(e)->lei_lrunext; \
        } else { \
-               cache->c_lruhead = e->e_lrunext; \
+               cache->c_lruhead = LEI(e)->lei_lrunext; \
        } \
-       if ( e->e_lrunext != NULL ) { \
-               e->e_lrunext->e_lruprev = e->e_lruprev; \
+       if ( LEI(e)->lei_lrunext != NULL ) { \
+               LEI(LEI(e)->lei_lrunext)->lei_lruprev = LEI(e)->lei_lruprev; \
        } else { \
-               cache->c_lrutail = e->e_lruprev; \
+               cache->c_lrutail = LEI(e)->lei_lruprev; \
        } \
 }
 
 #define LRU_ADD( cache, e ) { \
-       e->e_lrunext = cache->c_lruhead; \
-       if ( e->e_lrunext != NULL ) { \
-               e->e_lrunext->e_lruprev = e; \
+       LEI(e)->lei_lrunext = cache->c_lruhead; \
+       if ( LEI(e)->lei_lrunext != NULL ) { \
+               LEI(LEI(e)->lei_lrunext)->lei_lruprev = e; \
        } \
        cache->c_lruhead = e; \
-       e->e_lruprev = NULL; \
+       LEI(e)->lei_lruprev = NULL; \
        if ( cache->c_lrutail == NULL ) { \
                cache->c_lrutail = e; \
        } \
 }
 
 /*
- * cache_create_entry_lock - create an entry in the cache, and lock it.
+ * bdb2i_cache_add_entry_rw - create and lock an entry in the cache
  * returns:    0       entry has been created and locked
  *             1       entry already existed
  *             -1      something bad happened
  */
 int
-bdb2i_cache_add_entry_lock(
+bdb2i_cache_add_entry_rw(
     struct cache       *cache,
     Entry              *e,
-    int                        state
+       int             rw
 )
 {
        int     i, rc;
@@ -121,12 +217,25 @@ bdb2i_cache_add_entry_lock(
        /* set cache mutex */
        ldap_pvt_thread_mutex_lock( &cache->c_mutex );
 
+#ifdef LDAP_DEBUG
+       assert( e->e_private == NULL );
+#endif
+
+       if( cache_entry_private_init(e) != 0 ) {
+               Debug( LDAP_DEBUG_ANY,
+               "====> bdb2i_cache_add_entry( %ld ): \"%s\": private init failed!\n",
+                   e->e_id, e->e_dn, 0 );
+               return( -1 );
+       }
+
        if ( avl_insert( &cache->c_dntree, (caddr_t) e,
                entry_dn_cmp, avl_dup_error ) != 0 )
        {
                Debug( LDAP_DEBUG_TRACE,
-                       "====> cache_add_entry lock: entry %20s id %lu already in dn cache\n",
-                   e->e_dn, e->e_id, 0 );
+               "====> bdb2i_cache_add_entry( %ld ): \"%s\": already in dn cache\n",
+                   e->e_id, e->e_dn, 0 );
+
+               cache_entry_private_destroy(e);
 
                /* free cache mutex */
                ldap_pvt_thread_mutex_unlock( &cache->c_mutex );
@@ -138,8 +247,8 @@ bdb2i_cache_add_entry_lock(
                entry_id_cmp, avl_dup_error ) != 0 )
        {
                Debug( LDAP_DEBUG_ANY,
-                       "====> entry %20s id %lu already in id cache\n",
-                   e->e_dn, e->e_id, 0 );
+               "====> bdb2i_cache_add_entry( %ld ): \"%s\": already in id cache\n",
+                   e->e_id, e->e_dn, 0 );
 
                /* delete from dn tree inserted above */
                if ( avl_delete( &cache->c_dntree, (caddr_t) e,
@@ -149,13 +258,19 @@ bdb2i_cache_add_entry_lock(
                            0, 0, 0 );
                }
 
+               cache_entry_private_destroy(e);
+
                /* free cache mutex */
                ldap_pvt_thread_mutex_unlock( &cache->c_mutex );
                return( -1 );
        }
 
-       e->e_state = state;
-       e->e_refcnt = 1;
+       cache_entry_rdwr_lock( e, rw );
+
+       /* put the entry into 'CREATING' state */
+       /* will be marked after when entry is returned */
+       LEI(e)->lei_state = CACHE_ENTRY_CREATING;
+       LEI(e)->lei_refcnt = 1;
 
        /* lru */
        LRU_ADD( cache, e );
@@ -166,8 +281,10 @@ bdb2i_cache_add_entry_lock(
                 * first 10 on the tail of the list.
                 */
                i = 0;
-               while ( cache->c_lrutail != NULL && cache->c_lrutail->e_refcnt
-                   != 0 && i < 10 ) {
+               while ( cache->c_lrutail != NULL &&
+                       LEI(cache->c_lrutail)->lei_refcnt != 0 &&
+                       i < 10 )
+               {
                        /* move this in-use entry to the front of the q */
                        ee = cache->c_lrutail;
                        LRU_DELETE( cache, ee );
@@ -179,18 +296,118 @@ bdb2i_cache_add_entry_lock(
                 * found at least one to delete - try to get back under
                 * the max cache size.
                 */
-               while ( cache->c_lrutail != NULL && cache->c_lrutail->e_refcnt
-                    == 0 && cache->c_cursize > cache->c_maxsize ) {
+               while ( cache->c_lrutail != NULL &&
+                       LEI(cache->c_lrutail)->lei_refcnt == 0 &&
+                       cache->c_cursize > cache->c_maxsize )
+               {
                        e = cache->c_lrutail;
 
-               /* check for active readers/writer lock */
+                       /* delete from cache and lru q */
+                       /* XXX do we need rc ? */
+                       rc = cache_delete_entry_internal( cache, e );
+                       cache_entry_private_destroy( e );
+                       entry_free( e );
+               }
+       }
+
+       /* free cache mutex */
+       ldap_pvt_thread_mutex_unlock( &cache->c_mutex );
+       return( 0 );
+}
+
+/*
+ * cache_update_entry - update a LOCKED entry which has been deleted.
+ * returns:    0       entry has been created and locked
+ *             1       entry already existed
+ *             -1      something bad happened
+ */
+int
+bdb2i_cache_update_entry(
+    struct cache       *cache,
+    Entry              *e
+)
+{
+       int     i, rc;
+       Entry   *ee;
+
+       /* set cache mutex */
+       ldap_pvt_thread_mutex_lock( &cache->c_mutex );
+
 #ifdef LDAP_DEBUG
-                       assert(!ldap_pvt_thread_rdwr_active( &e->e_rdwr ));
+       assert( e->e_private );
 #endif
 
+       if ( avl_insert( &cache->c_dntree, (caddr_t) e,
+               entry_dn_cmp, avl_dup_error ) != 0 )
+       {
+               Debug( LDAP_DEBUG_TRACE,
+               "====> bdb2i_cache_add_entry( %ld ): \"%s\": already in dn cache\n",
+                   e->e_id, e->e_dn, 0 );
+
+               /* free cache mutex */
+               ldap_pvt_thread_mutex_unlock( &cache->c_mutex );
+               return( 1 );
+       }
+
+       /* id tree */
+       if ( avl_insert( &cache->c_idtree, (caddr_t) e,
+               entry_id_cmp, avl_dup_error ) != 0 )
+       {
+               Debug( LDAP_DEBUG_ANY,
+               "====> bdb2i_cache_update_entry( %ld ): \"%s\": already in id cache\n",
+                   e->e_id, e->e_dn, 0 );
+
+               /* delete from dn tree inserted above */
+               if ( avl_delete( &cache->c_dntree, (caddr_t) e,
+                       entry_dn_cmp ) == NULL )
+               {
+                       Debug( LDAP_DEBUG_ANY, "====> can't delete from dn cache\n",
+                           0, 0, 0 );
+               }
+
+               /* free cache mutex */
+               ldap_pvt_thread_mutex_unlock( &cache->c_mutex );
+               return( -1 );
+       }
+
+       /* put the entry into 'CREATING' state */
+       /* will be marked after when entry is returned */
+       LEI(e)->lei_state = CACHE_ENTRY_CREATING;
+
+       /* lru */
+       LRU_ADD( cache, e );
+       if ( ++cache->c_cursize > cache->c_maxsize ) {
+               /*
+                * find the lru entry not currently in use and delete it.
+                * in case a lot of entries are in use, only look at the
+                * first 10 on the tail of the list.
+                */
+               i = 0;
+               while ( cache->c_lrutail != NULL &&
+                       LEI(cache->c_lrutail)->lei_refcnt != 0 &&
+                       i < 10 )
+               {
+                       /* move this in-use entry to the front of the q */
+                       ee = cache->c_lrutail;
+                       LRU_DELETE( cache, ee );
+                       LRU_ADD( cache, ee );
+                       i++;
+               }
+
+               /*
+                * found at least one to delete - try to get back under
+                * the max cache size.
+                */
+               while ( cache->c_lrutail != NULL &&
+                       LEI(cache->c_lrutail)->lei_refcnt == 0 &&
+                       cache->c_cursize > cache->c_maxsize )
+               {
+                       e = cache->c_lrutail;
+
                        /* delete from cache and lru q */
+                       /* XXX do we need rc ? */
                        rc = cache_delete_entry_internal( cache, e );
-
+                       cache_entry_private_destroy( e );
                        entry_free( e );
                }
        }
@@ -231,20 +448,30 @@ bdb2i_cache_find_entry_dn2id(
                 */
                free(e.e_ndn);
 
-               Debug(LDAP_DEBUG_TRACE, "====> cache_find_entry_dn2id: found dn: %s\n",
-                       dn, 0, 0);
+#ifdef LDAP_DEBUG
+               assert( ep->e_private );
+#endif
 
                /*
                 * entry is deleted or not fully created yet
                 */
-               if ( ep->e_state == ENTRY_STATE_DELETED ||
-                       ep->e_state == ENTRY_STATE_CREATING )
-               {
+               if ( LEI(ep)->lei_state != CACHE_ENTRY_READY ) {
+#ifdef LDAP_DEBUG
+                       assert(LEI(ep)->lei_state != CACHE_ENTRY_UNDEFINED);
+#endif
+                       Debug(LDAP_DEBUG_TRACE,
+                       "====> bdb2i_cache_find_entry_dn2id(\"%s\"): %ld (not ready) %d\n",
+                               dn, ep->e_id, LEI(ep)->lei_state);
+
                        /* free cache mutex */
                        ldap_pvt_thread_mutex_unlock( &cache->c_mutex );
                        return( NOID );
                }
 
+               Debug(LDAP_DEBUG_TRACE,
+                       "====> bdb2i_cache_find_entry_dn2id(\"%s\"): %ld\n",
+                       dn, ep->e_id, 0);
+
                /* lru */
                LRU_DELETE( cache, ep );
                LRU_ADD( cache, ep );
@@ -289,23 +516,32 @@ try_again:
        if ( (ep = (Entry *) avl_find( cache->c_idtree, (caddr_t) &e,
                entry_id_cmp )) != NULL )
        {
-               Debug(LDAP_DEBUG_TRACE,
-                       "====> cache_find_entry_dn2id: found id: %ld rw: %d\n",
-                       id, rw, 0);
+#ifdef LDAP_DEBUG
+               assert( ep->e_private );
+#endif
 
                /*
                 * entry is deleted or not fully created yet
                 */
-               if ( ep->e_state == ENTRY_STATE_DELETED ||
-                       ep->e_state == ENTRY_STATE_CREATING )
-               {
+               if ( LEI(ep)->lei_state != CACHE_ENTRY_READY ) {
+#ifdef LDAP_DEBUG
+                       assert(LEI(ep)->lei_state != CACHE_ENTRY_UNDEFINED);
+#endif
+                       Debug(LDAP_DEBUG_TRACE,
+                               "====> bdb2i_cache_find_entry_id( %ld ): %ld (not ready) %d\n",
+                               id, ep->e_id, LEI(ep)->lei_state);
+
                        /* free cache mutex */
                        ldap_pvt_thread_mutex_unlock( &cache->c_mutex );
                        return( NULL );
                }
 
+               Debug(LDAP_DEBUG_TRACE,
+                       "====> bdb2i_cache_find_entry_id( %ld, %s ) \"%s\" (found)\n",
+                       id, rw ? "w" : "r", ep->e_dn);
+
                /* acquire reader lock */
-               if ( entry_rdwr_trylock(ep, rw) == LDAP_PVT_THREAD_EBUSY ) {
+               if ( cache_entry_rdwr_trylock(ep, rw) == LDAP_PVT_THREAD_EBUSY ) {
                        /* could not acquire entry lock...
                         * owner cannot free as we have the cache locked.
                         * so, unlock the cache, yield, and try again.
@@ -321,7 +557,7 @@ try_again:
                LRU_DELETE( cache, ep );
                LRU_ADD( cache, ep );
                 
-               ep->e_refcnt++;
+               LEI(ep)->lei_refcnt++;
 
                /* free cache mutex */
                ldap_pvt_thread_mutex_unlock( &cache->c_mutex );
@@ -354,16 +590,16 @@ bdb2i_cache_delete_entry(
 {
        int     rc;
 
-       Debug( LDAP_DEBUG_TRACE, "====> cache_delete_entry:\n", 0, 0, 0 );
-
        /* set cache mutex */
        ldap_pvt_thread_mutex_lock( &cache->c_mutex );
 
-       /* XXX check for writer lock - should also check no readers pending */
 #ifdef LDAP_DEBUG
-       assert(ldap_pvt_thread_rdwr_writers( &e->e_rdwr ) == 1);
+       assert( e->e_private );
 #endif
 
+       Debug( LDAP_DEBUG_TRACE, "====> bdb2i_cache_delete_entry( %ld )\n",
+               e->e_id, 0, 0 );
+
        rc = cache_delete_entry_internal( cache, e );
 
        /* free cache mutex */
@@ -404,7 +640,7 @@ cache_delete_entry_internal(
        /*
         * flag entry to be freed later by a call to cache_return_entry()
         */
-       e->e_state = ENTRY_STATE_DELETED;
+       LEI(e)->lei_state = CACHE_ENTRY_DELETED;
 
        return( 0 );
 }
@@ -417,14 +653,14 @@ lru_print( struct cache *cache )
        Entry   *e;
 
        fprintf( stderr, "LRU queue (head to tail):\n" );
-       for ( e = cache->c_lruhead; e != NULL; e = e->e_lrunext ) {
-               fprintf( stderr, "\tdn %20s id %lu refcnt %d\n", e->e_dn,
-                   e->e_id, e->e_refcnt );
+       for ( e = cache->c_lruhead; e != NULL; e = LEI(e)->lei_lrunext ) {
+               fprintf( stderr, "\tdn \"%20s\" id %ld refcnt %d\n",
+                       e->e_dn, e->e_id, LEI(e)->lei_refcnt );
        }
        fprintf( stderr, "LRU queue (tail to head):\n" );
-       for ( e = cache->c_lrutail; e != NULL; e = e->e_lruprev ) {
-               fprintf( stderr, "\tdn %20s id %lu refcnt %d\n", e->e_dn,
-                   e->e_id, e->e_refcnt );
+       for ( e = cache->c_lrutail; e != NULL; e = LEI(e)->lei_lruprev ) {
+               fprintf( stderr, "\tdn \"%20s\" id %ld refcnt %d\n",
+                       e->e_dn, e->e_id, LEI(e)->lei_refcnt );
        }
 }
 
index 1450775135a89cd7057009e168ab100be765fe95..9de7630eb290cb427d5dcf9307f436969f154dcf 100644 (file)
@@ -76,7 +76,7 @@ bdb2i_dn2id(
        /* first check the cache */
        if ( (id = bdb2i_cache_find_entry_dn2id( be, &li->li_cache, dn )) != NOID ) {
                free( dn );
-               Debug( LDAP_DEBUG_TRACE, "<= bdb2i_dn2id %lu (in cache)\n", id,
+               Debug( LDAP_DEBUG_TRACE, "<= bdb2i_dn2id %ld (in cache)\n", id,
                        0, 0 );
                return( id );
        }
@@ -106,7 +106,7 @@ bdb2i_dn2id(
 
        ldbm_datum_free( db->dbc_db, data );
 
-       Debug( LDAP_DEBUG_TRACE, "<= bdb2i_dn2id %lu\n", id, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, "<= bdb2i_dn2id %ld\n", id, 0, 0 );
        return( id );
 }
 
@@ -153,8 +153,8 @@ bdb2i_dn2id_delete(
  * entry.
  */
 
-static Entry *
-dn2entry(
+Entry *
+bdb2i_dn2entry_rw(
     BackendDB  *be,
     char       *dn,
     char       **matched,
@@ -172,14 +172,14 @@ dn2entry(
        *matched = NULL;
 
        if ( (id = bdb2i_dn2id( be, dn )) != NOID &&
-               (e = bdb2i_id2entry( be, id, rw )) != NULL )
+               (e = bdb2i_id2entry_rw( be, id, rw )) != NULL )
        {
                return( e );
        }
 
        if ( id != NOID ) {
                Debug(LDAP_DEBUG_ANY,
-                       "dn2entry_%s: no entry for valid id (%lu), dn \"%s\"\n",
+                       "dn2entry_%s: no entry for valid id (%ld), dn \"%s\"\n",
                        rw ? "w" : "r", id, dn);
                /* must have been deleted from underneath us */
                /* treat as if NOID was found */
@@ -208,25 +208,4 @@ dn2entry(
        return( NULL );
 }
 
-Entry *
-bdb2i_dn2entry_r(
-       BackendDB       *be,
-       char    *dn,
-       char    **matched
-)
-{
-       return( dn2entry( be, dn, matched, 0 ) );
-}
-
-Entry *
-bdb2i_dn2entry_w(
-       BackendDB       *be,
-       char    *dn,
-       char    **matched
-)
-{
-       return( dn2entry( be, dn, matched, 1 ) );
-}
-
-
 
index 88a854a8b5968aa549f4589299783e3ddb6f742b..d5cc90d95fdcc3626fb587581593e1a7ce53aba4 100644 (file)
@@ -86,7 +86,7 @@ bdb2i_filter_candidates(
                break;
        }
 
-       Debug( LDAP_DEBUG_TRACE, "<= bdb2i_filter_candidates %lu\n",
+       Debug( LDAP_DEBUG_TRACE, "<= bdb2i_filter_candidates %ld\n",
            result ? ID_BLOCK_NIDS(result) : 0, 0, 0 );
        return( result );
 }
@@ -117,7 +117,7 @@ ava_candidates(
                break;
        }
 
-       Debug( LDAP_DEBUG_TRACE, "<= ava_candidates %lu\n",
+       Debug( LDAP_DEBUG_TRACE, "<= ava_candidates %ld\n",
            idl ? ID_BLOCK_NIDS(idl) : 0, 0, 0 );
        return( idl );
 }
@@ -134,7 +134,7 @@ presence_candidates(
 
        idl = bdb2i_index_read( be, type, 0, "*" );
 
-       Debug( LDAP_DEBUG_TRACE, "<= presence_candidates %lu\n",
+       Debug( LDAP_DEBUG_TRACE, "<= presence_candidates %ld\n",
            idl ? ID_BLOCK_NIDS(idl) : 0, 0, 0 );
        return( idl );
 }
@@ -171,7 +171,7 @@ approx_candidates(
                }
        }
 
-       Debug( LDAP_DEBUG_TRACE, "<= approx_candidates %lu\n",
+       Debug( LDAP_DEBUG_TRACE, "<= approx_candidates %ld\n",
            idl ? ID_BLOCK_NIDS(idl) : 0, 0, 0 );
        return( idl );
 }
@@ -212,7 +212,7 @@ list_candidates(
                }
        }
 
-       Debug( LDAP_DEBUG_TRACE, "<= list_candidates %lu\n",
+       Debug( LDAP_DEBUG_TRACE, "<= list_candidates %ld\n",
            idl ? ID_BLOCK_NIDS(idl) : 0, 0, 0 );
        return( idl );
 }
@@ -279,7 +279,7 @@ substring_candidates(
                }
        }
 
-       Debug( LDAP_DEBUG_TRACE, "<= substring_candidates %lu\n",
+       Debug( LDAP_DEBUG_TRACE, "<= substring_candidates %ld\n",
            idl ? ID_BLOCK_NIDS(idl) : 0, 0, 0 );
        return( idl );
 }
@@ -347,7 +347,7 @@ substring_comp_candidates(
                }
        }
 
-       Debug( LDAP_DEBUG_TRACE, "<= substring_comp_candidates %lu\n",
+       Debug( LDAP_DEBUG_TRACE, "<= substring_comp_candidates %ld\n",
            idl ? ID_BLOCK_NIDS(idl) : 0, 0, 0 );
        return( idl );
 }
index 82a295efdbac00fc96b37105023a1f7f17bbab65..83db5d07a86d35c71455a7f6489929d650231382 100644 (file)
@@ -25,7 +25,7 @@ bdb2i_id2children_add(
 
        ldbm_datum_init( key );
 
-       Debug( LDAP_DEBUG_TRACE, "=> bdb2i_id2children_add( %lu, %lu )\n",
+       Debug( LDAP_DEBUG_TRACE, "=> bdb2i_id2children_add( %ld, %ld )\n",
               p ? p->e_id : 0, e->e_id, 0 );
 
        if ( (db = bdb2i_cache_open( be, "id2children", BDB2_SUFFIX,
@@ -67,7 +67,7 @@ bdb2i_id2children_remove(
        ID_BLOCK                *idl;
        char            buf[20];
 
-       Debug( LDAP_DEBUG_TRACE, "=> bdb2i_id2children_remove( %lu, %lu )\n",
+       Debug( LDAP_DEBUG_TRACE, "=> bdb2i_id2children_remove( %ld, %ld )\n",
                p ? p->e_id : 0, e->e_id, 0 );
 
        if ( (db = bdb2i_cache_open( be, "id2children", BDB2_SUFFIX,
@@ -110,7 +110,7 @@ bdb2i_has_children(
 
        ldbm_datum_init( key );
 
-       Debug( LDAP_DEBUG_TRACE, "=> bdb2i_has_children( %lu )\n", p->e_id , 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, "=> bdb2i_has_children( %ld )\n", p->e_id , 0, 0 );
 
        if ( (db = bdb2i_cache_open( be, "id2children", BDB2_SUFFIX,
            LDBM_WRCREAT )) == NULL ) {
@@ -133,7 +133,7 @@ bdb2i_has_children(
                rc = 1;
        }
 
-       Debug( LDAP_DEBUG_TRACE, "<= bdb2i_has_children( %lu ): %s\n",
+       Debug( LDAP_DEBUG_TRACE, "<= bdb2i_has_children( %ld ): %s\n",
                                        p->e_id, rc ? "yes" : "no", 0 );
        return( rc );
 }
index 8507567055678a52e3b8ce0c90193ea8a7caeeca..bbcb8be1b1545f1bee6c33d767a10d3ae6b35d96 100644 (file)
@@ -9,6 +9,11 @@
 #include "slap.h"
 #include "back-bdb2.h"
 
+/*
+ * This routine adds (or updates) an entry on disk.
+ * The cache should already be updated.
+ */
+
 int
 bdb2i_id2entry_add( BackendDB *be, Entry *e )
 {
@@ -20,7 +25,7 @@ bdb2i_id2entry_add( BackendDB *be, Entry *e )
        ldbm_datum_init( key );
        ldbm_datum_init( data );
 
-       Debug( LDAP_DEBUG_TRACE, "=> bdb2i_id2entry_add( %lu, \"%s\" )\n", e->e_id,
+       Debug( LDAP_DEBUG_TRACE, "=> bdb2i_id2entry_add( %ld, \"%s\" )\n", e->e_id,
            e->e_dn, 0 );
 
        if ( (db = bdb2i_cache_open( be, "id2entry", BDB2_SUFFIX, LDBM_WRCREAT ))
@@ -45,11 +50,9 @@ bdb2i_id2entry_add( BackendDB *be, Entry *e )
        ldap_pvt_thread_mutex_unlock( &entry2str_mutex );
 
        bdb2i_cache_close( be, db );
-       (void) bdb2i_cache_add_entry_lock( &li->li_cache, e, 0 );
 
        Debug( LDAP_DEBUG_TRACE, "<= bdb2i_id2entry_add %d\n", rc, 0, 0 );
 
-       /* XXX should entries be born locked, i.e. apply writer lock here? */
        return( rc );
 }
 
@@ -61,12 +64,14 @@ bdb2i_id2entry_delete( BackendDB *be, Entry *e )
        Datum           key;
        int             rc;
 
-       Debug(LDAP_DEBUG_TRACE, "=> bdb2i_id2entry_delete( %lu, \"%s\" )\n", e->e_id,
+       Debug(LDAP_DEBUG_TRACE, "=> bdb2i_id2entry_delete( %ld, \"%s\" )\n", e->e_id,
            e->e_dn, 0 );
 
+#ifdef notdef
 #ifdef LDAP_DEBUG
        /* check for writer lock */
-       assert(ldap_pvt_thread_rdwr_writers(&e->e_rdwr));
+       assert(ldap_pvt_thread_rdwr_writers(&e->e_rdwr) == 1);
+#endif
 #endif
 
        ldbm_datum_init( key );
@@ -79,7 +84,7 @@ bdb2i_id2entry_delete( BackendDB *be, Entry *e )
        }
 
        if ( bdb2i_cache_delete_entry( &li->li_cache, e ) != 0 ) {
-               Debug(LDAP_DEBUG_ANY, "could not delete %lu (%s) from cache\n",
+               Debug(LDAP_DEBUG_ANY, "could not delete %ld (%s) from cache\n",
                    e->e_id, e->e_dn, 0 );
        }
 
@@ -94,9 +99,9 @@ bdb2i_id2entry_delete( BackendDB *be, Entry *e )
        return( rc );
 }
 
-/* XXX returns entry with reader/writer lock */
+/* returns entry with reader/writer lock */
 Entry *
-bdb2i_id2entry( BackendDB *be, ID id, int rw )
+bdb2i_id2entry_rw( BackendDB *be, ID id, int rw )
 {
        struct ldbminfo *li = (struct ldbminfo *) be->be_private;
        struct dbcache  *db;
@@ -110,8 +115,8 @@ bdb2i_id2entry( BackendDB *be, ID id, int rw )
                rw ? "w" : "r", id, 0 );
 
        if ( (e = bdb2i_cache_find_entry_id( &li->li_cache, id, rw )) != NULL ) {
-               Debug( LDAP_DEBUG_TRACE, "<= bdb2i_id2entry_%s 0x%lx (cache)\n",
-                       rw ? "w" : "r", (unsigned long)e, 0 );
+               Debug( LDAP_DEBUG_TRACE, "<= bdb2i_id2entry_%s( %ld ) 0x%lx (cache)\n",
+                       rw ? "w" : "r", id, (unsigned long)e );
                return( e );
        }
 
@@ -145,30 +150,26 @@ bdb2i_id2entry( BackendDB *be, ID id, int rw )
                return( NULL );
        }
 
-       /* acquire required reader/writer lock */
-       if (entry_rdwr_lock(e, rw)) {
-               /* XXX set DELETE flag?? */
-               entry_free(e);
-               return(NULL);
+       if ( e->e_id != id ) {
+               Debug( LDAP_DEBUG_TRACE,
+                       "<= bdb2i_id2entry_%s( %ld ) (wrong id %ld on disk)\n",
+                       rw ? "w" : "r", id, e->e_id );
+               entry_free( e );
+               return( NULL );
        }
 
-       e->e_id = id;
-       (void) bdb2i_cache_add_entry_lock( &li->li_cache, e, 0 );
+       if ( bdb2i_cache_add_entry_rw( &li->li_cache, e, rw ) != 0 ) {
+               Debug( LDAP_DEBUG_TRACE,
+                       "<= bdb2i_id2entry_%s( %ld ) (cache add failed)\n",
+                       rw ? "w" : "r", id, 0 );
+               entry_free( e );
+               return( NULL );
+       }
 
-       Debug( LDAP_DEBUG_TRACE, "<= bdb2i_id2entry_%s( %ld ) (disk)\n",
-               rw ? "w" : "r", id, 0 );
-       return( e );
-}
+       Debug( LDAP_DEBUG_TRACE, "<= bdb2i_id2entry_%s( %ld ) 0x%lx (disk)\n",
+               rw ? "w" : "r", id, (unsigned long) e );
 
-Entry *
-bdb2i_id2entry_r( BackendDB *be, ID id )
-{
-       return( bdb2i_id2entry( be, id, 0 ) );
+       return( e );
 }
 
-Entry *
-bdb2i_id2entry_w( BackendDB *be, ID id )
-{
-       return( bdb2i_id2entry( be, id, 1 ) );
-}
 
index dea359debc649a9f3e1c38f2fb414a7f0ba04aea..d82078b3f77efc7bae2a6c77d851c4bbe02f41d2 100644 (file)
@@ -181,7 +181,7 @@ bdb2i_idl_fetch(
        }
        free( (char *) tmp );
 
-       Debug( LDAP_DEBUG_TRACE, "<= bdb2i_idl_fetch %lu ids (%lu max)\n",
+       Debug( LDAP_DEBUG_TRACE, "<= bdb2i_idl_fetch %ld ids (%ld max)\n",
               ID_BLOCK_NIDS(idl), ID_BLOCK_NMAX(idl), 0 );
        return( idl );
 }
@@ -500,7 +500,7 @@ bdb2i_idl_insert_key(
                        case 0:         /* id inserted */
                                if ( rc == 2 ) {
                                        Debug( LDAP_DEBUG_ANY,
-                                           "id %lu already in next block\n",
+                                           "id %ld already in next block\n",
                                            id, 0, 0 );
                                }
                                free( kstr );
index 15c82cf5ad8f96a69f7f03115dd9489b63ea1475..4344606632c7f27656965e06d32c940bb6526cce 100644 (file)
@@ -111,7 +111,7 @@ bdb2i_index_read(
        if ( ! (indextype & indexmask) ) {
                idl =  bdb2i_idl_allids( be );
                Debug( LDAP_DEBUG_TRACE,
-                   "<= bdb2i_index_read %lu candidates (allids - not indexed)\n",
+                   "<= bdb2i_index_read %ld candidates (allids - not indexed)\n",
                    idl ? ID_BLOCK_NIDS(idl) : 0, 0, 0 );
                return( idl );
        }
@@ -151,7 +151,7 @@ bdb2i_index_read(
 
        bdb2i_cache_close( be, db );
 
-       Debug( LDAP_DEBUG_TRACE, "<= bdb2i_index_read %lu candidates\n",
+       Debug( LDAP_DEBUG_TRACE, "<= bdb2i_index_read %ld candidates\n",
            idl ? ID_BLOCK_NIDS(idl) : 0, 0, 0 );
        return( idl );
 }
index 717f653af78f40dafa8ec2ae1d7dce7c920456f5..d310ca0c7a35346054794cd374fa9d13b749d658 100644 (file)
@@ -145,8 +145,9 @@ bdb2i_back_modrdn_internal(
        free( e->e_ndn );
        e->e_dn = new_dn;
        e->e_ndn = new_ndn;
+       (void) bdb2i_cache_update_entry( &li->li_cache, e );
 
-       /* XXX
+       /*
         * At some point here we need to update the attribute values in
         * the entry itself that were effected by this RDN change
         * (respecting the value of the deleteoldrdn parameter).
index 11c11e5cb1197dfe26d891bedcd8243ea1559442..711603a46cbac62b641360da89f2fb10c00d8d7f 100644 (file)
@@ -42,7 +42,7 @@ next_id_read( BackendDB *be )
 
        if(id < 1) {
                Debug( LDAP_DEBUG_ANY,
-                       "next_id_read %lu: atol(%s) return non-positive integer\n",
+                       "next_id_read %ld: atol(%s) return non-positive integer\n",
                        id, buf, 0 );
                return NOID;
        }
@@ -60,7 +60,7 @@ next_id_write( BackendDB *be, ID id )
        int             rc;
 
        if ( (fp = fopen( file, "w" )) == NULL ) {
-               Debug( LDAP_DEBUG_ANY, "next_id_write(%lu): could not open \"%s\"\n",
+               Debug( LDAP_DEBUG_ANY, "next_id_write(%ld): could not open \"%s\"\n",
                    id, file, 0 );
                return -1;
        } 
@@ -68,13 +68,13 @@ next_id_write( BackendDB *be, ID id )
        rc = 0;
 
        if ( fprintf( fp, "%ld\n", id ) == EOF ) {
-               Debug( LDAP_DEBUG_ANY, "next_id_write(%lu): cannot fprintf\n",
+               Debug( LDAP_DEBUG_ANY, "next_id_write(%ld): cannot fprintf\n",
                    id, 0, 0 );
                rc = -1;
        }
 
        if( fclose( fp ) != 0 ) {
-               Debug( LDAP_DEBUG_ANY, "next_id_write %lu: cannot fclose\n",
+               Debug( LDAP_DEBUG_ANY, "next_id_write %ld: cannot fclose\n",
                    id, 0, 0 );
                rc = -1;
        }
index 0a10c2cf1d374c5af6097d24c540696670a7231a..d66cf1826d091790dcf445017012465e0283814c 100644 (file)
@@ -34,11 +34,13 @@ void bdb2i_attr_index_config LDAP_P(( struct ldbminfo *li, char *fname,
  * cache.c
  */
 
-void bdb2i_cache_set_state LDAP_P(( struct cache *cache, Entry *e, int state ));
-void bdb2i_cache_return_entry_r LDAP_P(( struct cache *cache, Entry *e ));
-void bdb2i_cache_return_entry_w LDAP_P(( struct cache *cache, Entry *e ));
-int bdb2i_cache_add_entry_lock LDAP_P(( struct cache *cache, Entry *e,
- int state ));
+int bdb2i_cache_add_entry_rw LDAP_P(( struct cache *cache, Entry *e, int rw ));
+int bdb2i_cache_update_entry LDAP_P(( struct cache *cache, Entry *e ));
+void bdb2i_cache_return_entry_rw LDAP_P(( struct cache *cache, Entry *e,
+ int rw ));
+#define bdb2i_cache_return_entry_r(c, e) bdb2i_cache_return_entry_rw((c), (e), 0)
+#define bdb2i_cache_return_entry_w(c, e) bdb2i_cache_return_entry_rw((c), (e), 1)
+
 ID bdb2i_cache_find_entry_dn2id LDAP_P(( BackendDB *be, struct cache *cache,
  char *dn ));
 Entry * bdb2i_cache_find_entry_id LDAP_P(( struct cache *cache, ID id, int rw ));
@@ -64,8 +66,11 @@ int bdb2i_cache_delete LDAP_P(( struct dbcache *db, Datum key ));
 int bdb2i_dn2id_add LDAP_P(( BackendDB *be, char *dn, ID id ));
 ID bdb2i_dn2id LDAP_P(( BackendDB *be, char *dn ));
 int bdb2i_dn2id_delete LDAP_P(( BackendDB *be, char *dn ));
-Entry * bdb2i_dn2entry_r LDAP_P(( BackendDB *be, char *dn, char **matched ));
-Entry * bdb2i_dn2entry_w LDAP_P(( BackendDB *be, char *dn, char **matched ));
+
+Entry * bdb2i_dn2entry_rw LDAP_P(( BackendDB *be, char *dn, char **matched,
+ int rw ));
+#define bdb2i_dn2entry_r(be, dn, m) bdb2i_dn2entry_rw((be), (dn), (m), 0)
+#define bdb2i_dn2entry_w(be, dn, m) bdb2i_dn2entry_rw((be), (dn), (m), 1)
 
 /*
  * filterindex.c
@@ -87,9 +92,10 @@ int bdb2i_has_children LDAP_P(( BackendDB *be, Entry *p ));
 
 int bdb2i_id2entry_add LDAP_P(( BackendDB *be, Entry *e ));
 int bdb2i_id2entry_delete LDAP_P(( BackendDB *be, Entry *e ));
-Entry * bdb2i_id2entry LDAP_P(( BackendDB *be, ID id, int rw )); 
-Entry * bdb2i_id2entry_r LDAP_P(( BackendDB *be, ID id ));
-Entry * bdb2i_id2entry_w LDAP_P(( BackendDB *be, ID id ));
+
+Entry * bdb2i_id2entry_rw LDAP_P(( BackendDB *be, ID id, int rw )); 
+#define bdb2i_id2entry_r(be, id)  bdb2i_id2entry_rw((be), (id), 0)
+#define bdb2i_id2entry_w(be, id)  bdb2i_id2entry_rw((be), (id), 1)
 
 /*
  * idl.c
index 073fe951b2672e5c64989897dc8614b1816a0b8a..5358d74f5610ad9b0bc25487609dc285a4357a8a 100644 (file)
@@ -171,7 +171,7 @@ bdb2i_back_search_internal(
 
                /* get the entry with reader lock */
                if ( (e = bdb2i_id2entry_r( be, id )) == NULL ) {
-                       Debug( LDAP_DEBUG_ARGS, "candidate %lu not found\n",
+                       Debug( LDAP_DEBUG_ARGS, "candidate %ld not found\n",
                               id, 0, 0 );
                        continue;
                }
index b23ca2a7761e096ac1fe111bc8349137df0fb49a..fe88ed895d12137675094cd0729d164d6dcf5953 100644 (file)
@@ -305,6 +305,7 @@ cache_add_entry_rw(
                        e = cache->c_lrutail;
 
                        /* delete from cache and lru q */
+                       /* XXX do we need rc ? */
                        rc = cache_delete_entry_internal( cache, e );
                        cache_entry_private_destroy( e );
                        entry_free( e );
@@ -407,6 +408,7 @@ cache_update_entry(
                        e = cache->c_lrutail;
 
                        /* delete from cache and lru q */
+                       /* XXX do we need rc ? */
                        rc = cache_delete_entry_internal( cache, e );
                        cache_entry_private_destroy( e );
                        entry_free( e );
index deb5d9dedc7dcbf45f4d5e6878559669cf739902..3144339f11ce70ed560c147d718c46889a5ef383 100644 (file)
@@ -291,9 +291,9 @@ main( int argc, char **argv )
                                        sprintf( buf2, "%c%ld", EQ_PREFIX, pid );
                                        key.dptr = buf2;
                                        key.dsize = strlen( buf2 ) + 1;
-                                       if ( idl_insert_key( be, db2, key, id )
+                                       if ( bdb2i_idl_insert_key( be, db2, key, id )
                                            != 0 ) {
-                                               perror( "idl_insert_key" );
+                                               perror( "bdb2i_idl_insert_key" );
                                                exit( 1 );
                                        }
                                }
index 1c7f5331b221e806f18cd1fc11641297a62244b3..ff427aab9e1eda926a3673dfe007b1cbd49bec0c 100644 (file)
@@ -108,7 +108,7 @@ main( int argc, char **argv )
        li = (struct ldbminfo *) be->be_private;
        li->li_dbcachewsync = 0;
 
-       attr_masks( be->be_private, attr, &indexmask, &syntaxmask );
+       bdb2i_attr_masks( be->be_private, attr, &indexmask, &syntaxmask );
        if ( indexmask == 0 ) {
                exit( 0 );
        }
@@ -160,7 +160,7 @@ main( int argc, char **argv )
                                        if ( strcasecmp( type, attr ) == 0 ) {
                                                bv.bv_val = val;
                                                bv.bv_len = vlen;
-                                               index_add_values( be, attr,
+                                               bdb2i_index_add_values( be, attr,
                                                    vals, id );
                                        }
                                }
index 2e0ef1f8dde30812d415d04989d1ce157f8b9980..ae1b64cb352fc14de3e603e887225c917a28320e 100644 (file)
@@ -257,7 +257,7 @@ main( int argc, char **argv )
                                    avl_dup_error ) != 0 ) {
                                        free( type );
                                } else {
-                                       attr_masks( be->be_private, type,
+                                       bdb2i_attr_masks( be->be_private, type,
                                            &indexmask, &syntaxmask );
                                        if ( indexmask ) {
                                                args[i - 2] = type;