-static void *msg_thread (void *data)
-{
- msg_subscription_t *sub = data;
- msg_bank_t *bank = libvlc_bank (sub->instance);
-
- vlc_mutex_lock (&bank->lock);
- for (;;)
- {
- /* Wait for messages */
- assert (sub->begin < VLC_MSG_QSIZE);
- assert (sub->end < VLC_MSG_QSIZE);
- while (sub->begin != sub->end)
- {
- msg_item_t *msg = sub->items[sub->begin];
- unsigned overruns = sub->overruns;
-
- if (++sub->begin == VLC_MSG_QSIZE)
- sub->begin = 0;
- sub->overruns = 0;
- vlc_mutex_unlock (&bank->lock);
-
- sub->func (sub->opaque, msg, overruns);
- msg_Release (msg);
-
- vlc_mutex_lock (&bank->lock);
- }
-
- mutex_cleanup_push (&bank->lock);
- vlc_cond_wait (&bank->wait, &bank->lock);
- vlc_cleanup_pop ();
- }
- assert (0);
-}
-