31 typedef struct xmms_ringbuf_priv_St {
44 static gpointer xmms_ringbuf_xform_thread (gpointer data);
56 priv->buffer_lock = g_mutex_new ();
58 priv->state_cond = g_cond_new ();
59 priv->state_lock = g_mutex_new ();
60 priv->thread = g_thread_create (xmms_ringbuf_xform_thread, xform, TRUE, NULL);
73 g_mutex_lock (priv->state_lock);
77 g_cond_wait (priv->state_cond, priv->state_lock);
79 g_mutex_unlock (priv->state_lock);
81 g_thread_join (priv->thread);
102 methods.
init = xmms_ringbuf_plugin_init;
103 methods.
destroy = xmms_ringbuf_plugin_destroy;
104 methods.
read = xmms_ringbuf_plugin_read;
111 ringbuf_plugin = xform_plugin;
136 }
else if (res == -1) {
138 g_mutex_lock (priv->state_lock);
147 xmms_ringbuf_xform_thread (gpointer data)
154 g_mutex_lock (priv->state_lock);
158 g_cond_signal (priv->state_cond);
160 g_mutex_unlock (priv->state_lock);
162 g_mutex_lock (priv->state_lock);
167 g_cond_signal (priv->state_cond);
169 g_cond_wait (priv->state_cond, priv->state_lock);
172 XMMS_DBG (
"thread: state: %d", priv->state);
175 g_cond_signal (priv->state_cond);
176 g_mutex_unlock (priv->state_lock);
185 xmms_ringbuf_plugin_setup);
struct xmms_ringbuf_St xmms_ringbuf_t
guint xmms_ringbuf_read_wait(xmms_ringbuf_t *ringbuf, gpointer data, guint len, GMutex *mtx)
Same as xmms_ringbuf_read but blocks until you have all the data you want.
xmms_ringbuf_t * xmms_ringbuf_new(guint size)
Allocate a new ringbuffer.
guint xmms_ringbuf_write_wait(xmms_ringbuf_t *ringbuf, gconstpointer data, guint len, GMutex *mtx)
Same as xmms_ringbuf_write but blocks until there is enough free space.
void xmms_ringbuf_clear(xmms_ringbuf_t *ringbuf)
Clear the ringbuffers data.
void xmms_ringbuf_set_eos(xmms_ringbuf_t *ringbuf, gboolean eos)
Set EOS flag on ringbuffer.
#define XMMS_DBG(fmt,...)
G_BEGIN_DECLS struct xmms_error_St xmms_error_t