Hi Since valgrind shows me following I'm asking me if later code is wrong. As putting the variables just after the if statement the application runs more reliable. valgrind --vgdb=yes --vgdb-error=0 --read-var-info=yes ./gsequencer ==11700== Memcheck, a memory error detector ==11700== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==11700== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==11700== Command: ./gsequencer ==11700== ==11700== (action at startup) vgdb me ... ==11700== ==11700== TO DEBUG THIS PROCESS USING GDB: start GDB like this ==11700== /path/to/gdb ./gsequencer ==11700== and then give GDB the following command ==11700== target remote | /usr/lib/valgrind/../../bin/vgdb --pid=11700 ==11700== --pid is optional if only one valgrind process is running ==11700== ==11700== Warning: bad signal number 268435456 in sigaction() ** Message: loading preferences for: /home/joelkraehemann/.gsequencer/ags.conf (gsequencer:11700): GLib-GObject-WARNING **: /build/glib2.0-ocmJ1Y/glib2.0-2.46.2/./gobject/gsignal.c:2516: signal 'stop' is invalid for instance '0x1338a2e0' of type 'AgsDevout' ==11700== Thread 6: ==11700== Conditional jump or move depends on uninitialised value(s) ==11700== at 0x4C6DE5: ags_thread_loop (ags_thread-posix.c:2198) ==11700== by 0x911A0A3: start_thread (pthread_create.c:309) ==11700== by 0x941506C: clone (clone.S:111) ==11700== ==11700== (action on error) vgdb me ... ==11700== Continuing ... ==11700== Conditional jump or move depends on uninitialised value(s) ==11700== at 0x4C6DF7: ags_thread_loop (ags_thread-posix.c:2204) ==11700== by 0x911A0A3: start_thread (pthread_create.c:309) ==11700== by 0x941506C: clone (clone.S:111) ==11700== ==11700== (action on error) vgdb me ... ==11700== Continuing ... ==11700== Gdb request to kill this process joelkraehemann@debian:~/gsequencer$ valgrind --vgdb=yes --vgdb-error=0 --read-var-info=yes ./gsequencer ==11932== Memcheck, a memory error detector ==11932== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==11932== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==11932== Command: ./gsequencer ==11932== ==11932== (action at startup) vgdb me ... ==11932== ==11932== TO DEBUG THIS PROCESS USING GDB: start GDB like this ==11932== /path/to/gdb ./gsequencer ==11932== and then give GDB the following command ==11932== target remote | /usr/lib/valgrind/../../bin/vgdb --pid=11932 ==11932== --pid is optional if only one valgrind process is running ==11932== /* idle */ if(g_atomic_pointer_get(&(thread->parent)) == NULL){ #ifdef AGS_USE_TIMER pthread_mutex_lock(thread->timer_mutex); if(!g_atomic_int_get(&(thread->timer_expired))){ g_atomic_int_set(&(thread->timer_wait), TRUE); while(!g_atomic_int_get(&(thread->timer_expired))){ pthread_cond_wait(thread->timer_cond, thread->timer_mutex); } } g_atomic_int_set(&(thread->timer_wait), FALSE); g_atomic_int_set(&(thread->timer_expired), FALSE); pthread_mutex_unlock(thread->timer_mutex); #else long time_spent; static const long time_unit = NSEC_PER_SEC / AGS_THREAD_MAX_PRECISION; clock_gettime(CLOCK_MONOTONIC, &time_now); if(time_now.tv_sec > time_prev.tv_sec){ time_spent = (time_now.tv_nsec) + (NSEC_PER_SEC - time_prev.tv_nsec); }else{ time_spent = time_now.tv_nsec - time_prev.tv_nsec; } if(time_spent < time_unit){ struct timespec timed_sleep = { 0, 0, }; if(time_spent < time_unit){ timed_sleep.tv_nsec = time_unit - time_spent; nanosleep(&timed_sleep, NULL); } } clock_gettime(CLOCK_MONOTONIC, &time_prev); #endif } Bests, Joël