mspang New Member
Joined: 31 Dec 2007 Posts: 1
|
Posted: Mon Dec 31, 2007 11:44 pm Post subject: Linux Sound Bug [libao] [patch] |
|
|
In src/linux/audio.c, pthread_create() is called before pthread_mutex_init() and pthread_cond_init(). The created thread then tries to lock the (possibly uninitialized) mutex.
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: | 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();
} |
Last edited by mspang on Wed Jan 02, 2008 5:14 am; edited 1 time in total |
|