[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: Memory access violation when stopping slapd. (ITS#870)
At 04:19 PM 11/2/00 +0000, jwirecki@paradyne.com wrote:
>Full_Name: Jerzy Wirecki
>Version: 2.0.6
>OS: WinNT 4.0
>URL: ftp://ftp.openldap.org/incoming/
>Submission from: (NULL) (135.90.24.1)
>
>
>When stopping slapd on NT, ldbm_back_db_destroy() in module
>servers\slapd\back-ldbm\init.c is called twice, the second time
>trying to dereference a NULL pointer. Here is my fix:
Though a reasonable work around, the more appropriate fix
is to fix the NT port such that it does not call destroy
functions more than once [as is intended].
Kurt
>==============================================================================
>
>int
>ldbm_back_db_destroy(
> BackendDB *be
>)
>{
> /* should free/destroy every in be_private */
> struct ldbminfo *li = (struct ldbminfo *) be->be_private;
> if(li == NULL) // jwirecki
> return 0; // jwirecki
> free( li->li_directory );
> attr_index_destroy( li->li_attrs );
>
> ldap_pvt_thread_mutex_destroy( &li->li_root_mutex );
> ldap_pvt_thread_mutex_destroy( &li->li_add_mutex );
> ldap_pvt_thread_mutex_destroy( &li->li_cache.c_mutex );
> ldap_pvt_thread_mutex_destroy( &li->li_nextid_mutex );
> ldap_pvt_thread_mutex_destroy( &li->li_dbcache_mutex );
> ldap_pvt_thread_cond_destroy( &li->li_dbcache_cv );
>
> free( be->be_private );
> be->be_private = NULL;
>
> return 0;
>}