]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-monitor/cache.c
address ITS#4332; might remove dynamicObject counting
[openldap] / servers / slapd / back-monitor / cache.c
index 4f5ca062a2318f35b39452dbcbaca4a2ed9fc176..071ae06ab968a32352d03c935c491dae64969a0f 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2001-2005 The OpenLDAP Foundation.
+ * Copyright 2001-2006 The OpenLDAP Foundation.
  * Portions Copyright 2001-2003 Pierangelo Masarati.
  * All rights reserved.
  *
@@ -136,6 +136,8 @@ monitor_cache_get(
        assert( ndn != NULL );
        assert( ep != NULL );
 
+       *ep = NULL;
+
        tmp_mc.mc_ndn = *ndn;
        ldap_pvt_thread_mutex_lock( &mi->mi_cache_mutex );
        mc = ( monitor_cache_t * )avl_find( mi->mi_cache,
@@ -144,16 +146,12 @@ monitor_cache_get(
        if ( mc != NULL ) {
                /* entry is returned with mutex locked */
                monitor_cache_lock( mc->mc_e );
-               ldap_pvt_thread_mutex_unlock( &mi->mi_cache_mutex );
                *ep = mc->mc_e;
-
-               return( 0 );
        }
-       
+
        ldap_pvt_thread_mutex_unlock( &mi->mi_cache_mutex );
-       *ep = NULL;
 
-       return( -1 );
+       return ( *ep == NULL ? -1 : 0 );
 }
 
 /*
@@ -280,7 +278,11 @@ monitor_entry_destroy( void *v_mc )
                mp = ( monitor_entry_t * )mc->mc_e->e_private;
 
                if ( mp->mp_cb ) {
-                       /* TODO */
+                       if ( mp->mp_cb->mc_free ) {
+                               mp->mp_cb->mc_free( mc->mc_e,
+                                       mp->mp_cb->mc_private );
+                       }
+                       ch_free( mp->mp_cb );
                }
 
                ldap_pvt_thread_mutex_destroy( &mp->mp_mutex );