diff options
Diffstat (limited to 'src/pulsecore/asyncq.c')
-rw-r--r-- | src/pulsecore/asyncq.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/pulsecore/asyncq.c b/src/pulsecore/asyncq.c index f64931a5..67f661fe 100644 --- a/src/pulsecore/asyncq.c +++ b/src/pulsecore/asyncq.c @@ -163,14 +163,14 @@ static int push(pa_asyncq*l, void *p, pa_bool_t wait) { return 0; } -static pa_bool_t flush_postq(pa_asyncq *l) { +static pa_bool_t flush_postq(pa_asyncq *l, pa_bool_t wait) { struct localq *q; pa_assert(l); while ((q = l->last_localq)) { - if (push(l, q->data, FALSE) < 0) + if (push(l, q->data, wait) < 0) return FALSE; l->last_localq = q->prev; @@ -187,7 +187,7 @@ static pa_bool_t flush_postq(pa_asyncq *l) { int pa_asyncq_push(pa_asyncq*l, void *p, pa_bool_t wait) { pa_assert(l); - if (!flush_postq(l)) + if (!flush_postq(l, wait)) return -1; return push(l, p, wait); @@ -199,13 +199,15 @@ void pa_asyncq_post(pa_asyncq*l, void *p) { pa_assert(l); pa_assert(p); - if (pa_asyncq_push(l, p, FALSE) >= 0) - return; + if (flush_postq(l, FALSE)) + if (pa_asyncq_push(l, p, FALSE) >= 0) + return; /* OK, we couldn't push anything in the queue. So let's queue it * locally and push it later */ - pa_log("q overrun, queuing locally"); + if (pa_log_ratelimit()) + pa_log_warn("q overrun, queuing locally"); if (!(q = pa_flist_pop(PA_STATIC_FLIST_GET(localq)))) q = pa_xnew(struct localq, 1); @@ -299,7 +301,7 @@ void pa_asyncq_write_before_poll(pa_asyncq *l) { for (;;) { - if (flush_postq(l)) + if (flush_postq(l, FALSE)) break; if (pa_fdsem_before_poll(l->read_fdsem) >= 0) { |