summaryrefslogtreecommitdiffstats
path: root/polyp/protocol-esound.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2004-09-27 15:40:18 +0000
committerLennart Poettering <lennart@poettering.net>2004-09-27 15:40:18 +0000
commit35148d8c0565d9b7faafe423367c4bd750461533 (patch)
treeadd5dd975d6d3bdb3114e255f93e7bf8b5806b55 /polyp/protocol-esound.c
parent949014e154dec912e080335630818ed016b45394 (diff)
add POSIX locking to authkey.c
fix esound protocol cpu consumption when finishing a stream git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@242 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'polyp/protocol-esound.c')
-rw-r--r--polyp/protocol-esound.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/polyp/protocol-esound.c b/polyp/protocol-esound.c
index 79978740..4498a750 100644
--- a/polyp/protocol-esound.c
+++ b/polyp/protocol-esound.c
@@ -872,7 +872,7 @@ static void do_work(struct connection *c) {
assert(c->protocol && c->protocol->core && c->protocol->core->mainloop && c->protocol->core->mainloop->defer_enable);
c->protocol->core->mainloop->defer_enable(c->defer_event, 0);
-
+
if (c->dead)
return;
@@ -891,6 +891,7 @@ fail:
if (c->state == ESD_STREAMING_DATA && c->sink_input) {
c->dead = 1;
pa_memblockq_prebuf_disable(c->input_memblockq);
+ c->protocol->core->mainloop->defer_enable(c->defer_event, 0);
} else
connection_free(c);
}
@@ -937,7 +938,9 @@ static void sink_input_drop_cb(struct pa_sink_input *i, const struct pa_memchunk
/* do something */
assert(c->protocol && c->protocol->core && c->protocol->core->mainloop && c->protocol->core->mainloop->defer_enable);
- c->protocol->core->mainloop->defer_enable(c->defer_event, 1);
+
+ if (!c->dead)
+ c->protocol->core->mainloop->defer_enable(c->defer_event, 1);
/* assert(pa_memblockq_get_length(c->input_memblockq) > 2048); */
}
@@ -963,7 +966,9 @@ static void source_output_push_cb(struct pa_source_output *o, const struct pa_me
/* do something */
assert(c->protocol && c->protocol->core && c->protocol->core->mainloop && c->protocol->core->mainloop->defer_enable);
- c->protocol->core->mainloop->defer_enable(c->defer_event, 1);
+
+ if (!c->dead)
+ c->protocol->core->mainloop->defer_enable(c->defer_event, 1);
}
static void source_output_kill_cb(struct pa_source_output *o) {