diff --git a/daemon/call.c b/daemon/call.c index fc38511c9..790980686 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -3220,7 +3220,8 @@ static void __call_cleanup(struct call *c) { while (c->stream_fds.head) { struct stream_fd *sfd = g_queue_pop_head(&c->stream_fds); - poller_del_item(rtpe_poller, sfd->socket.fd); + if (sfd->poller) + poller_del_item(sfd->poller, sfd->socket.fd); obj_put(sfd); } diff --git a/daemon/main.c b/daemon/main.c index e9f6b6a0a..e10765d8d 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -1232,7 +1232,7 @@ int main(int argc, char **argv) { thread_create_detach_prio(poller_loop, rtpe_poller_map, rtpe_config.scheduling, rtpe_config.priority, "poller"); } - if (!rtpe_config.poller_per_thread) + if (rtpe_config.poller_per_thread) thread_create_detach_prio(poller_loop2, rtpe_poller, rtpe_config.scheduling, rtpe_config.priority, "poller"); if (rtpe_config.media_num_threads < 0) diff --git a/daemon/media_socket.c b/daemon/media_socket.c index ecabb87d5..c4c3b8a37 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -805,10 +805,9 @@ static void release_port(socket_t *r, struct intf_spec *spec) { __C_DBG("trying to release port %u", port); - iptables_del_rule(r); - if (close_socket(r) == 0) { __C_DBG("port %u is released", port); + iptables_del_rule(r); bit_array_clear(pp->ports_used, port); g_atomic_int_inc(&pp->free_ports); if ((port & 1) == 0) { @@ -2659,6 +2658,7 @@ struct stream_fd *stream_fd_new(socket_t *fd, struct call *call, const struct lo if (p) { if (poller_add_item(p, &pi)) ilog(LOG_ERR, "Failed to add stream_fd to poller"); + sfd->poller = p; } return sfd; diff --git a/daemon/poller.c b/daemon/poller.c index 2b1a1de32..b078f3a98 100644 --- a/daemon/poller.c +++ b/daemon/poller.c @@ -384,10 +384,6 @@ int poller_poll(struct poller *p, int timeout) { mutex_lock(&p->lock); - ret = -1; - if (!p->items || !p->items_size) - goto out; - mutex_unlock(&p->lock); errno = 0; ret = epoll_wait(p->fd, evs, sizeof(evs) / sizeof(*evs), timeout); diff --git a/include/media_socket.h b/include/media_socket.h index cbe10cc82..ede7e8d6c 100644 --- a/include/media_socket.h +++ b/include/media_socket.h @@ -21,6 +21,8 @@ struct transport_protocol; struct ssrc_ctx; struct rtpengine_srtp; struct jb_packet; +struct stream_fd; +struct poller; typedef int rtcp_filter_func(struct media_packet *, GQueue *); typedef int (*rewrite_func)(str *, struct packet_stream *, struct stream_fd *, const endpoint_t *, @@ -123,6 +125,7 @@ struct stream_fd { struct crypto_context crypto; /* IN direction, LOCK: stream->in_lock */ struct dtls_connection dtls; /* LOCK: stream->in_lock */ int error_strikes; + struct poller *poller; }; struct sink_handler { struct packet_stream *sink;