diff options
| -rw-r--r-- | src/main.c | 3 | ||||
| -rw-r--r-- | src/player.h | 15 | 
2 files changed, 14 insertions, 4 deletions
| @@ -248,6 +248,9 @@ int main (int argc, char **argv) {  						BarUiStartEventCmd (&settings, "songstart", curStation,  								playlist, &player, PIANO_RET_OK); +						/* prevent race condition, mode must _not_ be FREED if +						 * thread has been started */ +						player.mode = PLAYER_STARTING;  						/* start player */  						pthread_create (&playerThread, NULL, BarPlayerThread,  								&player); diff --git a/src/player.h b/src/player.h index 82a6cd5..249fc6f 100644 --- a/src/player.h +++ b/src/player.h @@ -49,10 +49,17 @@ struct audioPlayer {  	size_t bufferRead;  	size_t bytesReceived; -	enum {PLAYER_FREED = 0, PLAYER_INITIALIZED, PLAYER_FOUND_ESDS, -			PLAYER_AUDIO_INITIALIZED, PLAYER_FOUND_STSZ, -			PLAYER_SAMPLESIZE_INITIALIZED, PLAYER_RECV_DATA, -			PLAYER_FINISHED_PLAYBACK} mode; +	enum { +		PLAYER_FREED = 0, /* thread is not running */ +		PLAYER_STARTING, /* thread is starting */ +		PLAYER_INITIALIZED, /* decoder/waitress initialized */ +		PLAYER_FOUND_ESDS, +		PLAYER_AUDIO_INITIALIZED, /* audio device opened */ +		PLAYER_FOUND_STSZ, +		PLAYER_SAMPLESIZE_INITIALIZED, +		PLAYER_RECV_DATA, /* playing track */ +		PLAYER_FINISHED_PLAYBACK +	} mode;  	PianoAudioFormat_t audioFormat; | 
