]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldbm/modify.c
Set peeraddr also for IPv6, fixes ITS#1918
[openldap] / servers / slapd / back-ldbm / modify.c
index c7978238a2ee8575acb0b551345d6a6281121548..03f81b1687aa2675d3faa87f8f9577538e062331 100644 (file)
@@ -110,7 +110,6 @@ int ldbm_modify_internal(
 #endif
 
                        rc = modify_replace_values( e, mod, text, textbuf, textlen );
-                       assert( rc != LDAP_TYPE_OR_VALUE_EXISTS );
                        if( rc != LDAP_SUCCESS ) {
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "backend", LDAP_LEVEL_INFO,
@@ -207,10 +206,7 @@ int ldbm_modify_internal(
        }
 
        /* check for abandon */
-       ldap_pvt_thread_mutex_lock( &op->o_abandonmutex );
-       rc = op->o_abandon;
-       ldap_pvt_thread_mutex_unlock( &op->o_abandonmutex );
-       if ( rc ) {
+       if ( op->o_abandon ) {
                rc = SLAPD_ABANDON;
                goto exit;
        }
@@ -297,6 +293,8 @@ ldbm_back_modify(
        Debug(LDAP_DEBUG_ARGS, "ldbm_back_modify:\n", 0, 0, 0);
 #endif
 
+       /* grab giant lock for writing */
+       ldap_pvt_thread_rdwr_wlock(&li->li_giant_rwlock);
 
        /* acquire and lock entry */
        if ( (e = dn2entry_w( be, ndn, &matched )) == NULL ) {
@@ -314,6 +312,7 @@ ldbm_back_modify(
                                NULL, dn, LDAP_SCOPE_DEFAULT );
                }
 
+               ldap_pvt_thread_rdwr_wunlock(&li->li_giant_rwlock);
                send_ldap_result( conn, op, LDAP_REFERRAL,
                        matched_dn, NULL, refs, NULL );
 
@@ -370,9 +369,11 @@ ldbm_back_modify(
                NULL, NULL, NULL, NULL );
 
        cache_return_entry_w( &li->li_cache, e );
+       ldap_pvt_thread_rdwr_wunlock(&li->li_giant_rwlock);
        return( 0 );
 
 error_return:;
        cache_return_entry_w( &li->li_cache, e );
+       ldap_pvt_thread_rdwr_wunlock(&li->li_giant_rwlock);
        return( -1 );
 }