player_control: added player_control.thread

player_control.thread contains the handle of the player thread, or
NULL if the player thread isn't running.
This commit is contained in:
Max Kellermann 2009-01-25 13:44:33 +01:00
parent ac0e799965
commit d628eb3e8b
3 changed files with 12 additions and 2 deletions

View File

@ -90,7 +90,11 @@ void playerWait(void)
void playerKill(void)
{
assert(pc.thread != NULL);
player_command(PLAYER_COMMAND_EXIT);
g_thread_join(pc.thread);
pc.thread = NULL;
idle_add(IDLE_PLAYER);
}

View File

@ -62,6 +62,10 @@ enum player_error {
struct player_control {
unsigned int buffered_before_play;
/** the handle of the player thread, or NULL if the player
thread isn't running */
GThread *thread;
struct notify notify;
volatile enum player_command command;
volatile enum player_state state;

View File

@ -548,8 +548,10 @@ static gpointer player_task(G_GNUC_UNUSED gpointer arg)
void player_create(void)
{
GError *e = NULL;
GThread *t;
if (!(t = g_thread_create(player_task, NULL, FALSE, &e)))
assert(pc.thread == NULL);
pc.thread = g_thread_create(player_task, NULL, true, &e);
if (pc.thread == NULL)
g_error("Failed to spawn player task: %s", e->message);
}