int detached )
 {
        ldap_debug_thread_t *t;
+
        if( thread_info_used >= thread_info_size ) {
                unsigned int more = thread_info_size + 8;
                unsigned int new_size = thread_info_size + more;
+
                t = calloc( more, sizeof(ldap_debug_thread_t) );
                assert( t != NULL );
                thread_info = realloc( thread_info, new_size * sizeof(*thread_info) );
                assert( thread_info != NULL );
-               while( thread_info_size < new_size ) {
+               do {
                        t->idx = thread_info_size;
                        thread_info[thread_info_size++] = t++;
-               }
+               } while( thread_info_size < new_size );
        }
+
        t = thread_info[thread_info_used];
        init_usage( &t->usage, msg );
        t->wrapped = *thread;
        if( !options_done )
                get_options();
        ERROR_IF( !threading_enabled, "ldap_pvt_thread_create" );
+
        if( wrap_threads ) {
                ldap_debug_thread_call_t *call = malloc(
                        sizeof( ldap_debug_thread_call_t ) );
                                remove_thread_info( t, "ldap_pvt_thread_join" ) );
                adjust_count( Idx_unjoined_thread, -1 );
        }
+
        return rc;
 }