]> git.sur5r.net Git - openldap/commitdiff
Assert ID != NOID when fetching from the datastore.
authorKurt Zeilenga <kurt@openldap.org>
Thu, 26 Aug 1999 21:00:22 +0000 (21:00 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Thu, 26 Aug 1999 21:00:22 +0000 (21:00 +0000)
Add additional abandon point to modrdn.
test005-modrdn still shows error.  Likely in dn2id, index, or idl codes.

servers/slapd/back-ldbm/dn2id.c
servers/slapd/back-ldbm/modrdn.c

index e157edcd1769f0c8bd11dcb83bff3d831776dc6e..ca3a2803dc1a878ddbc9fbc21fc16b01263f1ce3 100644 (file)
@@ -28,6 +28,7 @@ dn2id_add(
        struct ldbminfo *li = (struct ldbminfo *) be->be_private;
 
        Debug( LDAP_DEBUG_TRACE, "=> dn2id_add( \"%s\", %ld )\n", dn, id, 0 );
+       assert( id != NOID );
 
        if ( (db = ldbm_cache_open( be, "dn2id", LDBM_SUFFIX, LDBM_WRCREAT ))
            == NULL ) {
@@ -141,6 +142,8 @@ dn2id(
 
        (void) memcpy( (char *) &id, data.dptr, sizeof(ID) );
 
+       assert( id != NOID );
+
        ldbm_datum_free( db->dbc_db, data );
 
        Debug( LDAP_DEBUG_TRACE, "<= dn2id %ld\n", id, 0, 0 );
@@ -196,6 +199,8 @@ dn2id_delete(
 
        Debug( LDAP_DEBUG_TRACE, "=> dn2id_delete( \"%s\", %ld )\n", dn, id, 0 );
 
+       assert( id != NOID );
+
        if ( (db = ldbm_cache_open( be, "dn2id", LDBM_SUFFIX, LDBM_WRCREAT ))
            == NULL ) {
                Debug( LDAP_DEBUG_ANY,
@@ -213,7 +218,9 @@ dn2id_delete(
                        key.dsize = strlen( pdn ) + 2;
                        key.dptr = ch_malloc( key.dsize );
                        sprintf( key.dptr, "%c%s", DN_ONE_PREFIX, pdn );
+
                        (void) idl_delete_key( be, db, key, id );
+
                        free( key.dptr );
                        free( pdn );
                }
index d07f68021e450c8f9451c652a671eb7e386d1f39..e04d7bca0dfb7197eb82c92f078939de6bc74d70 100644 (file)
@@ -261,6 +261,14 @@ ldbm_back_modrdn(
        Debug( LDAP_DEBUG_TRACE, "ldbm_back_modrdn: new ndn=%s\n",
               new_ndn, 0, 0 );
 
+       /* check for abandon */
+       ldap_pvt_thread_mutex_lock( &op->o_abandonmutex );
+       if ( op->o_abandon ) {
+               ldap_pvt_thread_mutex_unlock( &op->o_abandonmutex );
+               goto return_results;
+       }
+
+       ldap_pvt_thread_mutex_unlock( &op->o_abandonmutex );
        if (dn2id ( be, new_ndn ) != NOID) {
                send_ldap_result( conn, op, LDAP_ALREADY_EXISTS,
                        NULL, NULL, NULL, NULL );