static void free_resinfo( syncres *sr )
 {
        syncres **st;
+       int freeit = 0;
        ldap_pvt_thread_mutex_lock( &sr->s_info->ri_mutex );
        for (st = &sr->s_info->ri_list; *st; st = &(*st)->s_rilist) {
                if (*st == sr) {
                        break;
                }
        }
+       if ( !sr->s_info->ri_list )
+               freeit = 1;
        ldap_pvt_thread_mutex_unlock( &sr->s_info->ri_mutex );
-       if ( !sr->s_info->ri_list ) {
+       if ( freeit ) {
                ldap_pvt_thread_mutex_destroy( &sr->s_info->ri_mutex );
                if ( sr->s_info->ri_e )
                        entry_free( sr->s_info->ri_e );