mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-06 13:29:56 -05:00
bug fixes for module-rtp-recv
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1858 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
8fdf054e68
commit
eb23601bb7
1 changed files with 23 additions and 10 deletions
|
|
@ -163,9 +163,22 @@ static int rtpoll_work_cb(pa_rtpoll_item *i) {
|
||||||
int64_t k, j, delta;
|
int64_t k, j, delta;
|
||||||
struct timespec now;
|
struct timespec now;
|
||||||
struct session *s;
|
struct session *s;
|
||||||
|
struct pollfd *p;
|
||||||
|
|
||||||
pa_assert_se(s = pa_rtpoll_item_get_userdata(i));
|
pa_assert_se(s = pa_rtpoll_item_get_userdata(i));
|
||||||
|
|
||||||
|
p = pa_rtpoll_item_get_pollfd(i, NULL);
|
||||||
|
|
||||||
|
if (p->revents & (POLLERR|POLLNVAL|POLLHUP|POLLOUT)) {
|
||||||
|
pa_log("poll() signalled bad revents.");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((p->revents & POLLIN) == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
p->revents = 0;
|
||||||
|
|
||||||
if (pa_rtp_recv(&s->rtp_context, &chunk, s->userdata->module->core->mempool) < 0)
|
if (pa_rtp_recv(&s->rtp_context, &chunk, s->userdata->module->core->mempool) < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
@ -405,15 +418,15 @@ static void session_free(struct session *s) {
|
||||||
pa_sink_input_unlink(s->sink_input);
|
pa_sink_input_unlink(s->sink_input);
|
||||||
pa_sink_input_unref(s->sink_input);
|
pa_sink_input_unref(s->sink_input);
|
||||||
|
|
||||||
pa_memblockq_free(s->memblockq);
|
|
||||||
pa_sdp_info_destroy(&s->sdp_info);
|
|
||||||
pa_rtp_context_destroy(&s->rtp_context);
|
|
||||||
|
|
||||||
PA_LLIST_REMOVE(struct session, s->userdata->sessions, s);
|
PA_LLIST_REMOVE(struct session, s->userdata->sessions, s);
|
||||||
pa_assert(s->userdata->n_sessions >= 1);
|
pa_assert(s->userdata->n_sessions >= 1);
|
||||||
s->userdata->n_sessions--;
|
s->userdata->n_sessions--;
|
||||||
pa_hashmap_remove(s->userdata->by_origin, s->sdp_info.origin);
|
pa_hashmap_remove(s->userdata->by_origin, s->sdp_info.origin);
|
||||||
|
|
||||||
|
pa_memblockq_free(s->memblockq);
|
||||||
|
pa_sdp_info_destroy(&s->sdp_info);
|
||||||
|
pa_rtp_context_destroy(&s->rtp_context);
|
||||||
|
|
||||||
pa_xfree(s);
|
pa_xfree(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -466,7 +479,7 @@ static void check_death_event_cb(pa_mainloop_api *m, pa_time_event *t, const str
|
||||||
pa_assert(m);
|
pa_assert(m);
|
||||||
pa_assert(t);
|
pa_assert(t);
|
||||||
pa_assert(ptv);
|
pa_assert(ptv);
|
||||||
pa_assert(s);
|
pa_assert(u);
|
||||||
|
|
||||||
pa_rtclock_get(&now);
|
pa_rtclock_get(&now);
|
||||||
|
|
||||||
|
|
@ -530,14 +543,14 @@ int pa__init(pa_module*m) {
|
||||||
m->userdata = u;
|
m->userdata = u;
|
||||||
u->module = m;
|
u->module = m;
|
||||||
u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
|
u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
|
||||||
u->n_sessions = 0;
|
|
||||||
|
|
||||||
u->sap_event = m->core->mainloop->io_new(m->core->mainloop, fd, PA_IO_EVENT_INPUT, sap_event_cb, u);
|
u->sap_event = m->core->mainloop->io_new(m->core->mainloop, fd, PA_IO_EVENT_INPUT, sap_event_cb, u);
|
||||||
|
|
||||||
u->by_origin = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
|
|
||||||
|
|
||||||
pa_sap_context_init_recv(&u->sap_context, fd);
|
pa_sap_context_init_recv(&u->sap_context, fd);
|
||||||
|
|
||||||
|
PA_LLIST_HEAD_INIT(struct session, u->sessions);
|
||||||
|
u->n_sessions = 0;
|
||||||
|
u->by_origin = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
|
||||||
|
|
||||||
pa_gettimeofday(&tv);
|
pa_gettimeofday(&tv);
|
||||||
pa_timeval_add(&tv, DEATH_TIMEOUT * PA_USEC_PER_SEC);
|
pa_timeval_add(&tv, DEATH_TIMEOUT * PA_USEC_PER_SEC);
|
||||||
u->check_death_event = m->core->mainloop->time_new(m->core->mainloop, &tv, check_death_event_cb, u);
|
u->check_death_event = m->core->mainloop->time_new(m->core->mainloop, &tv, check_death_event_cb, u);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue