Diff for /servers/slapd/back-bdb/dn2id.c between versions 1.137.2.2 and 1.137.2.3

version 1.137.2.2, 2007/08/31 23:14:01 version 1.137.2.3, 2007/12/06 05:43:27
Line 1 Line 1
 /* dn2id.c - routines to deal with the dn2id index */  /* dn2id.c - routines to deal with the dn2id index */
 /* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/dn2id.c,v 1.144 2007/08/17 18:33:46 hyc Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/dn2id.c,v 1.137.2.2 2007/08/31 23:14:01 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.  /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *   *
  * Copyright 2000-2007 The OpenLDAP Foundation.   * Copyright 2000-2007 The OpenLDAP Foundation.
Line 23 Line 23
 #include "idl.h"  #include "idl.h"
 #include "lutil.h"  #include "lutil.h"
   
   #define bdb_dn2id_lock                                  BDB_SYMBOL(dn2id_lock)
   
   static int
   bdb_dn2id_lock( struct bdb_info *bdb, struct berval *dn,
           int rw, BDB_LOCKER locker, DB_LOCK *lock )
   {
           int       rc;
           DBT       lockobj;
           int       db_rw;
   
           if (rw)
                   db_rw = DB_LOCK_WRITE;
           else
                   db_rw = DB_LOCK_READ;
   
           lockobj.data = dn->bv_val;
           lockobj.size = dn->bv_len;
   
           rc = LOCK_GET(bdb->bi_dbenv, BDB_LOCKID(locker), DB_LOCK_NOWAIT,
                                           &lockobj, db_rw, lock);
           return rc;
   }
   
 #ifndef BDB_HIER  #ifndef BDB_HIER
 int  int
 bdb_dn2id_add(  bdb_dn2id_add(
Line 146  bdb_dn2id_delete( Line 169  bdb_dn2id_delete(
 {  {
         struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;          struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
         DB *db = bdb->bi_dn2id->bdi_db;          DB *db = bdb->bi_dn2id->bdi_db;
         int             rc;  
         DBT             key;  
         char            *buf;          char            *buf;
           DBT             key;
           DB_LOCK lock;
         struct berval   pdn, ptr;          struct berval   pdn, ptr;
           int             rc;
   
         Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id_delete( \"%s\", 0x%08lx )\n",          Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id_delete( \"%s\", 0x%08lx )\n",
                 e->e_ndn, e->e_id, 0 );                  e->e_ndn, e->e_id, 0 );
Line 165  bdb_dn2id_delete( Line 189  bdb_dn2id_delete(
         AC_MEMCPY( ptr.bv_val, e->e_nname.bv_val, e->e_nname.bv_len );          AC_MEMCPY( ptr.bv_val, e->e_nname.bv_val, e->e_nname.bv_len );
         ptr.bv_val[ptr.bv_len] = '\0';          ptr.bv_val[ptr.bv_len] = '\0';
   
           /* We hold this lock until the TXN completes */
           rc = bdb_dn2id_lock( bdb, &e->e_nname, 1, TXN_ID( txn ), &lock );
           if ( rc ) return rc;
   
         /* delete it */          /* delete it */
         rc = db->del( db, txn, &key, 0 );          rc = db->del( db, txn, &key, 0 );
         if( rc != 0 ) {          if( rc != 0 ) {
Line 244  done: Line 272  done:
 int  int
 bdb_dn2id(  bdb_dn2id(
         Operation *op,          Operation *op,
         DB_TXN *txn,  
         struct berval   *dn,          struct berval   *dn,
         EntryInfo *ei )          EntryInfo *ei,
           BDB_LOCKER locker,
           DB_LOCK *lock )
 {  {
         struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;          struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
         DB *db = bdb->bi_dn2id->bdi_db;          DB *db = bdb->bi_dn2id->bdi_db;
           DBC     *cursor;
         int             rc;          int             rc;
         DBT             key, data;          DBT             key, data;
         ID              nid;          ID              nid;
Line 267  bdb_dn2id( Line 297  bdb_dn2id(
         data.ulen = sizeof(ID);          data.ulen = sizeof(ID);
         data.flags = DB_DBT_USERMEM;          data.flags = DB_DBT_USERMEM;
   
           rc = bdb_dn2id_lock( bdb, dn, 0, locker, lock );
           if ( rc ) return rc;
   
           rc = db->cursor( db, NULL, &cursor, bdb->bi_db_opflags );
           if ( rc ) return rc;
           if ( locker ) {
                   CURSOR_SETLOCKER(cursor, locker);
           }
   
         /* fetch it */          /* fetch it */
         rc = db->get( db, txn, &key, &data, bdb->bi_db_opflags );          rc = cursor->c_get( cursor, &key, &data, DB_SET );
   
         if( rc != 0 ) {          if( rc != 0 ) {
                 Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id: get failed: %s (%d)\n",                  Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id: get failed: %s (%d)\n",
Line 279  bdb_dn2id( Line 318  bdb_dn2id(
                         ei->bei_id, 0, 0 );                          ei->bei_id, 0, 0 );
         }          }
   
           cursor->c_close( cursor );
         op->o_tmpfree( key.data, op->o_tmpmemctx );          op->o_tmpfree( key.data, op->o_tmpmemctx );
         return rc;          return rc;
 }  }
Line 568  hdb_dn2id_delete( Line 608  hdb_dn2id_delete(
         int rc;          int rc;
         ID      nid;          ID      nid;
         unsigned char dlen[2];          unsigned char dlen[2];
           DB_LOCK lock;
   
         DBTzero(&key);          DBTzero(&key);
         key.size = sizeof(ID);          key.size = sizeof(ID);
Line 581  hdb_dn2id_delete( Line 622  hdb_dn2id_delete(
         data.dlen = data.size;          data.dlen = data.size;
         data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL;          data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL;
   
           /* We hold this lock until the TXN completes */
           rc = bdb_dn2id_lock( bdb, &e->e_nname, 1, TXN_ID( txn ), &lock );
           if ( rc ) return rc;
   
         key.data = &nid;          key.data = &nid;
         rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags );          rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags );
         if ( rc ) return rc;          if ( rc ) return rc;
Line 638  hdb_dn2id_delete( Line 683  hdb_dn2id_delete(
 int  int
 hdb_dn2id(  hdb_dn2id(
         Operation       *op,          Operation       *op,
         DB_TXN *txn,  
         struct berval   *in,          struct berval   *in,
         EntryInfo       *ei )          EntryInfo       *ei,
           BDB_LOCKER locker,
           DB_LOCK *lock )
 {  {
         struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;          struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
         DB *db = bdb->bi_dn2id->bdi_db;          DB *db = bdb->bi_dn2id->bdi_db;
Line 669  hdb_dn2id( Line 715  hdb_dn2id(
         data.dlen = data.ulen;          data.dlen = data.ulen;
         data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL;          data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL;
   
         rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags );          rc = bdb_dn2id_lock( bdb, in, 0, locker, lock );
           if ( rc ) return rc;
   
           rc = db->cursor( db, NULL, &cursor, bdb->bi_db_opflags );
         if ( rc ) return rc;          if ( rc ) return rc;
           if ( locker ) {
                   CURSOR_SETLOCKER( cursor, locker );
           }
   
         d = op->o_tmpalloc( data.size * 3, op->o_tmpmemctx );          d = op->o_tmpalloc( data.size * 3, op->o_tmpmemctx );
         d->nrdnlen[1] = nrlen & 0xff;          d->nrdnlen[1] = nrlen & 0xff;
Line 711  hdb_dn2id( Line 763  hdb_dn2id(
 int  int
 hdb_dn2id_parent(  hdb_dn2id_parent(
         Operation *op,          Operation *op,
         DB_TXN *txn,  
         BDB_LOCKER      locker,          BDB_LOCKER      locker,
         EntryInfo *ei,          EntryInfo *ei,
         ID *idp )          ID *idp )
Line 735  hdb_dn2id_parent( Line 786  hdb_dn2id_parent(
         DBTzero(&data);          DBTzero(&data);
         data.flags = DB_DBT_USERMEM;          data.flags = DB_DBT_USERMEM;
   
         rc = db->cursor( db, txn, &cursor, bdb->bi_db_opflags );          rc = db->cursor( db, NULL, &cursor, bdb->bi_db_opflags );
         if ( rc ) return rc;          if ( rc ) return rc;
         if ( !txn && locker ) {          if ( locker ) {
                 CURSOR_SETLOCKER(cursor, locker);                  CURSOR_SETLOCKER(cursor, locker);
         }          }
   

Removed from v.1.137.2.2  
changed lines
  Added in v.1.137.2.3


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org