void _mmplayer_cmd_lock_init(mmplayer_t *player)
{
- MMPLAYER_FENTER();
MMPLAYER_RETURN_IF_FAIL(player);
player->cmd_lock = g_new0(mmplayer_ticket_lock_t, 1);
g_mutex_init(&player->cmd_lock->ticket_mutex);
g_cond_init(&player->cmd_lock->ticket_cond);
player->cmd_lock->ticket_queue_head = 0;
player->cmd_lock->ticket_queue_tail = 0;
- MMPLAYER_FLEAVE();
}
void _mmplayer_cmd_lock_deinit(mmplayer_t *player)
{
- MMPLAYER_FENTER();
MMPLAYER_RETURN_IF_FAIL(player && player->cmd_lock);
g_mutex_clear(&player->cmd_lock->ticket_mutex);
g_cond_clear(&player->cmd_lock->ticket_cond);
player->cmd_lock->ticket_queue_head = 0;
player->cmd_lock->ticket_queue_tail = 0;
g_free(player->cmd_lock);
- MMPLAYER_FLEAVE();
}
void _mmplayer_cmd_lock(mmplayer_t *player)
GCond *cond;
GMutex *mutex;
- MMPLAYER_FENTER();
MMPLAYER_RETURN_IF_FAIL(player && player->cmd_lock);
cond = &player->cmd_lock->ticket_cond;
while (queue_me != player->cmd_lock->ticket_queue_head)
g_cond_wait(cond, mutex);
g_mutex_unlock(mutex);
- MMPLAYER_FLEAVE();
}
gboolean _mmplayer_cmd_trylock(mmplayer_t *player)
{
GMutex *mutex;
- MMPLAYER_FENTER();
MMPLAYER_RETURN_VAL_IF_FAIL(player && player->cmd_lock, FALSE);
mutex = &player->cmd_lock->ticket_mutex;
- if (!g_mutex_trylock(mutex)) {
- MMPLAYER_FLEAVE();
+ if (!g_mutex_trylock(mutex))
return FALSE;
- }
if (player->cmd_lock->ticket_queue_tail != player->cmd_lock->ticket_queue_head) {
g_mutex_unlock(mutex);
- MMPLAYER_FLEAVE();
return FALSE;
}
g_mutex_unlock(mutex);
_mmplayer_cmd_lock(player);
- MMPLAYER_FLEAVE();
return TRUE;
}
GCond *cond;
GMutex *mutex;
- MMPLAYER_FENTER();
MMPLAYER_RETURN_IF_FAIL(player && player->cmd_lock);
cond = &player->cmd_lock->ticket_cond;
(player->cmd_lock->ticket_queue_head + 1) % CMD_LOCK_TICKET_MAX;
g_cond_broadcast(cond);
g_mutex_unlock(mutex);
- MMPLAYER_FLEAVE();
}