]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-monitor/rww.c
Plug memory leak
[openldap] / servers / slapd / back-monitor / rww.c
index e05c45288b68c7bd000cebd975b5be070cfc7bd4..c1b2b96b403412e0a04297c1079f878ee79d3d0d 100644 (file)
@@ -1,12 +1,9 @@
 /* readw.c - deal with read waiters subsystem */
 /*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  */
 /*
- * Copyright 2001 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
- * 
  * Copyright 2001, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
  * 
  * This work has beed deveolped for the OpenLDAP Foundation 
@@ -73,20 +70,16 @@ monitor_subsys_readw_update_internal(
        int                     nconns, nwritewaiters, nreadwaiters;
        
        Attribute               *a;
-       struct berval           *bv[2], val, **b = NULL;
+       struct berval           bv[2], *b = NULL;
        char                    buf[1024];
        
        char                    *str = NULL;
        int                     num = 0;
 
-       bv[0] = &val;
-       bv[1] = NULL;
-
        assert( mi != NULL );
        assert( e != NULL );
        
-       bv[0] = &val;
-       bv[1] = NULL;
+       bv[1].bv_val = NULL;
        
        nconns = nwritewaiters = nreadwaiters = 0;
        for ( c = connection_first( &connindex );
@@ -114,18 +107,18 @@ monitor_subsys_readw_update_internal(
        snprintf( buf, sizeof( buf ), "%s=%d", str, num );
 
        if ( ( a = attr_find( e->e_attrs, monitor_ad_desc ) ) != NULL ) {
-               for ( b = a->a_vals; b[0] != NULL; b++ ) {
-                       if ( strncmp( b[0]->bv_val, str, strlen( str ) ) == 0 ) {
-                               free( b[0]->bv_val );
-                               b[0] = ber_bvstrdup( buf );
+               for ( b = a->a_vals; b[0].bv_val != NULL; b++ ) {
+                       if ( strncmp( b[0].bv_val, str, strlen( str ) ) == 0 ) {
+                               free( b[0].bv_val );
+                               ber_str2bv( buf, 0, 1, b );
                                break;
                        }
                }
        }
 
-       if ( b == NULL || b[0] == NULL ) {
-               val.bv_val = buf;
-               val.bv_len = strlen( buf );
+       if ( b == NULL || b[0].bv_val == NULL ) {
+               bv[0].bv_val = buf;
+               bv[0].bv_len = strlen( buf );
                attr_merge( e, monitor_ad_desc, bv );
        }