X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibrewrite%2Fsession.c;h=4fa58f876c5664e0f04af10563b938e7d30f8963;hb=474dfbc8fd75aed0376695ccc2f8c092a7a1bc6f;hp=bd0685167c926dab95868cd30e893df163a7e7d3;hpb=f8d49b01be9aa61f8913b754594a4e846308e809;p=openldap diff --git a/libraries/librewrite/session.c b/libraries/librewrite/session.c index bd0685167c..4fa58f876c 100644 --- a/libraries/librewrite/session.c +++ b/libraries/librewrite/session.c @@ -302,6 +302,32 @@ rewrite_session_var_get( return REWRITE_SUCCESS; } +static void +rewrite_session_clean( void *v_session ) +{ + struct rewrite_session *session = (struct rewrite_session *)v_session; + +#ifdef USE_REWRITE_LDAP_PVT_THREADS + ldap_pvt_thread_rdwr_wlock( &session->ls_vars_mutex ); +#endif /* USE_REWRITE_LDAP_PVT_THREADS */ + + rewrite_var_delete( session->ls_vars ); + +#ifdef USE_REWRITE_LDAP_PVT_THREADS + ldap_pvt_thread_rdwr_wunlock( &session->ls_vars_mutex ); + ldap_pvt_thread_rdwr_destroy( &session->ls_vars_mutex ); + ldap_pvt_thread_mutex_unlock( &session->ls_mutex ); + ldap_pvt_thread_mutex_destroy( &session->ls_mutex ); +#endif /* USE_REWRITE_LDAP_PVT_THREADS */ +} + +static void +rewrite_session_free( void *v_session ) +{ + rewrite_session_clean( v_session ); + free( v_session ); +} + /* * Deletes a session */ @@ -311,13 +337,11 @@ rewrite_session_delete( const void *cookie ) { - struct rewrite_session *session, tmp; + struct rewrite_session *session, tmp = { 0 }; assert( info != NULL ); assert( cookie != NULL ); - tmp.ls_cookie = ( void * )cookie; - session = rewrite_session_find( info, cookie ); if ( session == NULL ) { @@ -329,18 +353,7 @@ rewrite_session_delete( return REWRITE_SUCCESS; } -#ifdef USE_REWRITE_LDAP_PVT_THREADS - ldap_pvt_thread_rdwr_wlock( &session->ls_vars_mutex ); -#endif /* USE_REWRITE_LDAP_PVT_THREADS */ - - rewrite_var_delete( session->ls_vars ); - -#ifdef USE_REWRITE_LDAP_PVT_THREADS - ldap_pvt_thread_rdwr_wunlock( &session->ls_vars_mutex ); - ldap_pvt_thread_rdwr_destroy( &session->ls_vars_mutex ); - ldap_pvt_thread_mutex_unlock( &session->ls_mutex ); - ldap_pvt_thread_mutex_destroy( &session->ls_mutex ); -#endif /* USE_REWRITE_LDAP_PVT_THREADS */ + rewrite_session_clean( session ); #ifdef USE_REWRITE_LDAP_PVT_THREADS ldap_pvt_thread_rdwr_wlock( &info->li_cookies_mutex ); @@ -352,7 +365,9 @@ rewrite_session_delete( /* * There is nothing to delete in the return value */ + tmp.ls_cookie = ( void * )cookie; avl_delete( &info->li_cookies, ( caddr_t )&tmp, rewrite_cookie_cmp ); + free( session ); #ifdef USE_REWRITE_LDAP_PVT_THREADS @@ -382,7 +397,7 @@ rewrite_session_destroy( * Should call per-session destruction routine ... */ - count = avl_free( info->li_cookies, NULL ); + count = avl_free( info->li_cookies, rewrite_session_free ); info->li_cookies = NULL; #if 0