mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
cancel pending defers
This commit is contained in:
parent
8fac22afdb
commit
9b2b4b9b5c
5 changed files with 16 additions and 2 deletions
|
|
@ -844,6 +844,7 @@ static void
|
||||||
pinos_link_dispose (GObject * object)
|
pinos_link_dispose (GObject * object)
|
||||||
{
|
{
|
||||||
PinosLink *this = PINOS_LINK (object);
|
PinosLink *this = PINOS_LINK (object);
|
||||||
|
PinosLinkPrivate *priv = this->priv;
|
||||||
|
|
||||||
g_debug ("link %p: dispose", this);
|
g_debug ("link %p: dispose", this);
|
||||||
|
|
||||||
|
|
@ -878,6 +879,8 @@ pinos_link_dispose (GObject * object)
|
||||||
}
|
}
|
||||||
link_unregister_object (this);
|
link_unregister_object (this);
|
||||||
|
|
||||||
|
pinos_main_loop_defer_cancel (priv->main_loop, this, 0);
|
||||||
|
|
||||||
G_OBJECT_CLASS (pinos_link_parent_class)->dispose (object);
|
G_OBJECT_CLASS (pinos_link_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -267,20 +267,26 @@ pinos_main_loop_defer (PinosMainLoop *loop,
|
||||||
|
|
||||||
void
|
void
|
||||||
pinos_main_loop_defer_cancel (PinosMainLoop *loop,
|
pinos_main_loop_defer_cancel (PinosMainLoop *loop,
|
||||||
|
gpointer obj,
|
||||||
gulong id)
|
gulong id)
|
||||||
{
|
{
|
||||||
GList *walk;
|
GList *walk;
|
||||||
PinosMainLoopPrivate *priv;
|
PinosMainLoopPrivate *priv;
|
||||||
|
gboolean have_work = FALSE;
|
||||||
|
|
||||||
g_return_if_fail (PINOS_IS_MAIN_LOOP (loop));
|
g_return_if_fail (PINOS_IS_MAIN_LOOP (loop));
|
||||||
priv = loop->priv;
|
priv = loop->priv;
|
||||||
|
|
||||||
for (walk = priv->work.head; walk; walk = g_list_next (walk)) {
|
for (walk = priv->work.head; walk; walk = g_list_next (walk)) {
|
||||||
WorkItem *i = walk->data;
|
WorkItem *i = walk->data;
|
||||||
if (i->id == id) {
|
if ((id == 0 || i->id == id) && (obj == NULL || i->obj == obj)) {
|
||||||
|
i->seq = SPA_ID_INVALID;
|
||||||
i->func = NULL;
|
i->func = NULL;
|
||||||
|
have_work = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (priv->work_id == 0 && have_work)
|
||||||
|
priv->work_id = g_idle_add ((GSourceFunc) process_work_queue, loop);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,7 @@ gulong pinos_main_loop_defer (PinosMainLoop *loo
|
||||||
gpointer data,
|
gpointer data,
|
||||||
GDestroyNotify notify);
|
GDestroyNotify notify);
|
||||||
void pinos_main_loop_defer_cancel (PinosMainLoop *loop,
|
void pinos_main_loop_defer_cancel (PinosMainLoop *loop,
|
||||||
|
gpointer obj,
|
||||||
gulong id);
|
gulong id);
|
||||||
void pinos_main_loop_defer_complete (PinosMainLoop *loop,
|
void pinos_main_loop_defer_complete (PinosMainLoop *loop,
|
||||||
gpointer obj,
|
gpointer obj,
|
||||||
|
|
|
||||||
|
|
@ -759,13 +759,15 @@ static void
|
||||||
pinos_node_dispose (GObject * obj)
|
pinos_node_dispose (GObject * obj)
|
||||||
{
|
{
|
||||||
PinosNode *node = PINOS_NODE (obj);
|
PinosNode *node = PINOS_NODE (obj);
|
||||||
//PinosNodePrivate *priv = node->priv;
|
PinosNodePrivate *priv = node->priv;
|
||||||
|
|
||||||
g_debug ("node %p: dispose", node);
|
g_debug ("node %p: dispose", node);
|
||||||
pinos_node_set_state (node, PINOS_NODE_STATE_SUSPENDED);
|
pinos_node_set_state (node, PINOS_NODE_STATE_SUSPENDED);
|
||||||
|
|
||||||
node_unregister_object (node);
|
node_unregister_object (node);
|
||||||
|
|
||||||
|
pinos_main_loop_defer_cancel (priv->main_loop, node, 0);
|
||||||
|
|
||||||
G_OBJECT_CLASS (pinos_node_parent_class)->dispose (obj);
|
G_OBJECT_CLASS (pinos_node_parent_class)->dispose (obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -154,6 +154,7 @@ spa_ringbuffer_read_advance (SpaRingbuffer *rbuf,
|
||||||
ssize_t len)
|
ssize_t len)
|
||||||
{
|
{
|
||||||
size_t tmp = rbuf->readindex + len;
|
size_t tmp = rbuf->readindex + len;
|
||||||
|
__sync_synchronize();
|
||||||
rbuf->readindex = (rbuf->size_mask ? tmp & rbuf->size_mask : tmp % rbuf->size);
|
rbuf->readindex = (rbuf->size_mask ? tmp & rbuf->size_mask : tmp % rbuf->size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -232,6 +233,7 @@ spa_ringbuffer_write_advance (SpaRingbuffer *rbuf,
|
||||||
ssize_t len)
|
ssize_t len)
|
||||||
{
|
{
|
||||||
size_t tmp = rbuf->writeindex + len;
|
size_t tmp = rbuf->writeindex + len;
|
||||||
|
__sync_synchronize();
|
||||||
rbuf->writeindex = (rbuf->size_mask ? tmp & rbuf->size_mask : tmp % rbuf->size);
|
rbuf->writeindex = (rbuf->size_mask ? tmp & rbuf->size_mask : tmp % rbuf->size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue