From: Pierangelo Masarati Date: Mon, 30 Jul 2001 14:54:02 +0000 (+0000) Subject: fixes ITS#1261 (abort on modrdn with new dn already existing) X-Git-Tag: LDBM_PRE_GIANT_RWLOCK~1187 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=8edccd2554d3b5387772b9cd2bdd8103f01d571c;p=openldap fixes ITS#1261 (abort on modrdn with new dn already existing) --- diff --git a/servers/slapd/back-ldbm/modrdn.c b/servers/slapd/back-ldbm/modrdn.c index bcc3ae44db..9c8fb07a14 100644 --- a/servers/slapd/back-ldbm/modrdn.c +++ b/servers/slapd/back-ldbm/modrdn.c @@ -50,8 +50,11 @@ ldbm_back_modrdn( char *new_dn = NULL, *new_ndn = NULL; Entry *e, *p = NULL; Entry *matched; - int rootlock = 0; - int rc = -1, rc_id = 0; + int rootlock = 0; +#define CAN_ROLLBACK -1 +#define MUST_DESTROY 1 + int rc = CAN_ROLLBACK; + int rc_id = 0; ID id = NOID; const char *text = NULL; char textbuf[SLAP_TEXT_BUFLEN]; @@ -626,7 +629,7 @@ ldbm_back_modrdn( goto return_results; } - rc = -1; + rc = MUST_DESTROY; (void) cache_update_entry( &li->li_cache, e ); @@ -685,9 +688,10 @@ return_results: /* free entry and writer lock */ cache_return_entry_w( &li->li_cache, e ); - if ( rc ) { - /* if rc != 0 the entry is uncached and its private data - * is destroyed; the entry must be freed */ + if ( rc == MUST_DESTROY ) { + /* if rc == MUST_DESTROY the entry is uncached + * and its private data is destroyed; + * the entry must be freed */ entry_free( e ); } return( rc );