mirror of https://github.com/encounter/SDL.git
Fixed bug 4097 - Segmentation fault by SDL_CreateThreadWithStackSize
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.
This commit is contained in:
parent
5cbb90da02
commit
f9f45d0bf5
|
@ -91,7 +91,10 @@ SDL_SemWait(SDL_sem * sem)
|
||||||
return SDL_SetError("Passed a NULL semaphore");
|
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) {
|
if (retval < 0) {
|
||||||
retval = SDL_SetError("sem_wait() failed");
|
retval = SDL_SetError("sem_wait() failed");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue