mirror of https://github.com/mgba-emu/mgba.git
Properly isolate threading
This commit is contained in:
parent
fffe39153f
commit
b4cee4c286
|
@ -38,7 +38,7 @@ static void* _GBAThreadRun(void* context) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int GBAThreadStart(struct GBAThread* threadContext, pthread_t* thread) {
|
||||
int GBAThreadStart(struct GBAThread* threadContext) {
|
||||
// TODO: error check
|
||||
{
|
||||
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
@ -51,9 +51,13 @@ int GBAThreadStart(struct GBAThread* threadContext, pthread_t* thread) {
|
|||
|
||||
pthread_mutex_lock(&threadContext->mutex);
|
||||
threadContext->started = 0;
|
||||
pthread_create(thread, 0, _GBAThreadRun, threadContext);
|
||||
pthread_create(&threadContext->thread, 0, _GBAThreadRun, threadContext);
|
||||
pthread_cond_wait(&threadContext->cond, &threadContext->mutex);
|
||||
pthread_mutex_unlock(&threadContext->mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void GBAThreadJoin(struct GBAThread* threadContext) {
|
||||
pthread_join(threadContext->thread, 0);
|
||||
}
|
||||
|
|
|
@ -16,8 +16,10 @@ struct GBAThread {
|
|||
// Threading state
|
||||
pthread_mutex_t mutex;
|
||||
pthread_cond_t cond;
|
||||
pthread_t thread;
|
||||
};
|
||||
|
||||
int GBAThreadStart(struct GBAThread* threadContext, pthread_t* thread);
|
||||
int GBAThreadStart(struct GBAThread* threadContext);
|
||||
void GBAThreadJoin(struct GBAThread* threadContext);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -18,11 +18,8 @@ int main(int argc, char** argv) {
|
|||
struct GBAVideoSoftwareRenderer renderer;
|
||||
context.fd = fd;
|
||||
context.renderer = 0;
|
||||
pthread_t thread;
|
||||
|
||||
GBAThreadStart(&context, &thread);
|
||||
|
||||
pthread_join(thread, 0);
|
||||
GBAThreadStart(&context);
|
||||
GBAThreadJoin(&context);
|
||||
close(fd);
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue