static void xmms_output_destroy (xmms_object_t *object) { xmms_output_t *output = (xmms_output_t *)object; output->monitor_volume_running = FALSE; if (output->monitor_volume_thread) { g_thread_join (output->monitor_volume_thread); output->monitor_volume_thread = NULL; } xmms_output_filler_state (output, FILLER_QUIT); g_thread_join (output->filler_thread); if (output->plugin) { xmms_output_plugin_method_destroy (output->plugin, output); xmms_object_unref (output->plugin); } xmms_object_unref (output->playlist); g_mutex_free (output->status_mutex); g_mutex_free (output->playtime_mutex); g_mutex_free (output->filler_mutex); g_cond_free (output->filler_state_cond); xmms_ringbuf_destroy (output->filler_buffer); xmms_ipc_broadcast_unregister ( XMMS_IPC_SIGNAL_OUTPUT_VOLUME_CHANGED); xmms_ipc_broadcast_unregister ( XMMS_IPC_SIGNAL_PLAYBACK_STATUS); xmms_ipc_broadcast_unregister ( XMMS_IPC_SIGNAL_OUTPUT_CURRENTID); xmms_ipc_signal_unregister (XMMS_IPC_SIGNAL_OUTPUT_PLAYTIME); xmms_ipc_object_unregister (XMMS_IPC_OBJECT_OUTPUT); }
static void xmms_mediainfo_reader_stop (xmms_object_t *o) { xmms_mediainfo_reader_t *mir = (xmms_mediainfo_reader_t *) o; g_mutex_lock (mir->mutex); mir->running = FALSE; g_cond_signal (mir->cond); g_mutex_unlock (mir->mutex); xmms_ipc_broadcast_unregister (XMMS_IPC_SIGNAL_MEDIAINFO_READER_STATUS); xmms_ipc_signal_unregister (XMMS_IPC_SIGNAL_MEDIAINFO_READER_UNINDEXED); xmms_ipc_object_unregister (XMMS_IPC_OBJECT_MEDIAINFO_READER); g_thread_join (mir->thread); g_cond_free (mir->cond); g_mutex_free (mir->mutex); }