Skip to content

Commit

Permalink
Fixed bug 4097 - Segmentation fault by SDL_CreateThreadWithStackSize
Browse files Browse the repository at this point in the history
Dongsun Kim

Normal case
1. [thread 1] SDL_CreateThreadWithStackSize calls SDL_SYS_CreateThread.
2. [thread 1] If successful, it calls SDL_SemWait.
3. [thread 2] SDL_RunThread calls SDL_SYS_SetupThread, SDL_ThreadID, SDL_SemPost.
4. [thread 1] SDL_CreateThreadWithStackSize calls SDL_DestroySemaphore, SDL_free.

Crash case (Segmentation fault)
1. [thread 1] SDL_CreateThreadWithStackSize calls SDL_SYS_CreateThread.
2. [thread 1] If successful, it calls SDL_SemWait.
--> Error return due to SIGNAL(SYSTEM or Real Time) at sem_wait(pthread).
3. [thread 1] SDL_CreateThreadWithStackSize calls SDL_DestroySemaphore, SDL_free.
4. [thread 2] SDL_RunThread calls SDL_SYS_SetupThread, SDL_ThreadID, SDL_SemPost.
--> Segmentation fault at strlen or sem_post.
  • Loading branch information
slouken committed Feb 26, 2018
1 parent 5cbb90d commit f9f45d0
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion src/thread/pthread/SDL_syssem.c
Expand Up @@ -91,7 +91,10 @@ SDL_SemWait(SDL_sem * sem)
return SDL_SetError("Passed a NULL semaphore");
}

retval = sem_wait(&sem->sem);
do {
retval = sem_wait(&sem->sem);
} while (retval < 0 && errno == EINTR);

if (retval < 0) {
retval = SDL_SetError("sem_wait() failed");
}
Expand Down

0 comments on commit f9f45d0

Please sign in to comment.