X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=servers%2Fslapd%2Fback-meta%2Fdncache.c;h=32f427f72d492ace8cad02f8515abf6c7b712b94;hb=3c012a606b9b6d56a7bdf062806519eaa563db2e;hp=cfe5a80c5f7bfb1ce3a3a70f3ccbd126a16f2e4e;hpb=41aad6e27f839a5ef0b65be40cce4ddbb6f8265f;p=openldap diff --git a/servers/slapd/back-meta/dncache.c b/servers/slapd/back-meta/dncache.c index cfe5a80c5f..32f427f72d 100644 --- a/servers/slapd/back-meta/dncache.c +++ b/servers/slapd/back-meta/dncache.c @@ -1,7 +1,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1999-2005 The OpenLDAP Foundation. + * Copyright 1999-2007 The OpenLDAP Foundation. * Portions Copyright 2001-2003 Pierangelo Masarati. * Portions Copyright 1999-2003 Howard Chu. * All rights reserved. @@ -94,11 +94,10 @@ meta_dncache_get_target( { metadncacheentry_t tmp_entry, *entry; - time_t curr_time; int target = META_TARGET_NONE; - assert( cache ); - assert( ndn ); + assert( cache != NULL ); + assert( ndn != NULL ); tmp_entry.dn = *ndn; ldap_pvt_thread_mutex_lock( &cache->mutex ); @@ -116,13 +115,7 @@ meta_dncache_get_target( target = entry->target; } else { - - /* - * Need mutex? - */ - curr_time = time( NULL ); - - if ( entry->lastupdated+cache->ttl > curr_time ) { + if ( entry->lastupdated+cache->ttl > slap_get_time() ) { target = entry->target; } } @@ -149,8 +142,8 @@ meta_dncache_update_entry( time_t curr_time = 0L; int err = 0; - assert( cache ); - assert( ndn ); + assert( cache != NULL ); + assert( ndn != NULL ); /* * if cache->ttl < 0, cache never expires; @@ -158,11 +151,7 @@ meta_dncache_update_entry( * else, cache is used with ttl */ if ( cache->ttl > 0 ) { - - /* - * Need mutex? - */ - curr_time = time( NULL ); + curr_time = slap_get_time(); } tmp_entry.dn = *ndn; @@ -178,18 +167,23 @@ meta_dncache_update_entry( } else { entry = ch_malloc( sizeof( metadncacheentry_t ) + ndn->bv_len + 1 ); if ( entry == NULL ) { - ldap_pvt_thread_mutex_unlock( &cache->mutex ); - return -1; + err = -1; + goto error_return; } + entry->dn.bv_len = ndn->bv_len; entry->dn.bv_val = (char *)&entry[ 1 ]; - AC_MEMCPY( entry->dn.bv_val, ndn->bv_val, ndn->bv_len + 1 ); + AC_MEMCPY( entry->dn.bv_val, ndn->bv_val, ndn->bv_len ); + entry->dn.bv_val[ ndn->bv_len ] = '\0'; + entry->target = target; entry->lastupdated = curr_time; err = avl_insert( &cache->tree, ( caddr_t )entry, meta_dncache_cmp, meta_dncache_dup ); } + +error_return:; ldap_pvt_thread_mutex_unlock( &cache->mutex ); return err; @@ -209,8 +203,8 @@ meta_dncache_delete_entry( metadncacheentry_t *entry, tmp_entry; - assert( cache ); - assert( ndn ); + assert( cache != NULL ); + assert( ndn != NULL ); tmp_entry.dn = *ndn;