static void SDL_DelThread(SDL_Thread *thread) { int i; if ( !thread_lock ) { return; } SDL_mutexP(thread_lock); for ( i=0; i<SDL_numthreads; ++i ) { if ( thread == SDL_Threads[i] ) { break; } } if ( i < SDL_numthreads ) { if ( --SDL_numthreads > 0 ) { while ( i < SDL_numthreads ) { SDL_Threads[i] = SDL_Threads[i+1]; ++i; } } else { SDL_maxthreads = 0; SDL_free(SDL_Threads); SDL_Threads = NULL; } #ifdef DEBUG_THREADS printf("Deleting thread (%d left - %d max)\n", SDL_numthreads, SDL_maxthreads); #endif } SDL_mutexV(thread_lock); if ( SDL_Threads == NULL ) { SDL_ThreadsQuit(); } }
static void SDL_DelThread(SDL_Thread *thread) { int i; if ( !thread_lock ) { return; } SDL_mutexP(thread_lock); for ( i=0; i<SDL_numthreads; ++i ) { if ( thread == SDL_Threads[i] ) { break; } } if ( i < SDL_numthreads ) { if ( --SDL_numthreads > 0 ) { while ( i < SDL_numthreads ) { SDL_Threads[i] = SDL_Threads[i+1]; ++i; } } else { SDL_maxthreads = 0; SDL_free(SDL_Threads); SDL_Threads = NULL; } #ifdef DEBUG_THREADS printf("Deleting thread (%d left - %d max)\n", SDL_numthreads, SDL_maxthreads); #endif } SDL_mutexV(thread_lock); // @THE_CODE_BOSS_CHANGE: Turned this on to avoid leaking // Safe to do so since emulator only uses another thread for audio #if 1 /* There could be memory corruption if another thread is starting */ if ( SDL_Threads == NULL ) { SDL_ThreadsQuit(); } #endif }