If the thread gets to pthread_mutex_lock() before the mutex is initialized, the sound thread deadlocks and there is no sound. This affects libao drivers, not SDL, but almost always occurs on my dual core machine (90% or more of the time).
The mutex and condition need to be initialized before creating the thread. Patch:
Code: Select all
diff -ur zsnes-1.510/src/linux/audio.c zsnes-1.510-new/src/linux/audio.c
--- zsnes-1.510/src/linux/audio.c 2007-01-09 20:19:12.000000000 -0500
+++ zsnes-1.510-new/src/linux/audio.c 2007-12-30 20:33:07.000000000 -0500
@@ -177,11 +177,7 @@
}
else
{
- if (pthread_create(&audio_thread, 0, SoundThread_ao, 0))
- {
- puts("pthread_create() failed.");
- }
- else if (pthread_mutex_init(&audio_mutex, 0))
+ if (pthread_mutex_init(&audio_mutex, 0))
{
puts("pthread_mutex_init() failed.");
}
@@ -189,6 +185,10 @@
{
puts("pthread_cond_init() failed.");
}
+ else if (pthread_create(&audio_thread, 0, SoundThread_ao, 0))
+ {
+ puts("pthread_create() failed.");
+ }
InitSampleControl();
}