diff --git a/daemon/media_socket.c b/daemon/media_socket.c index 2284797c6..82f75eb81 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -1927,11 +1927,11 @@ static void kernelize(struct packet_stream *stream) { LOCK(&stream->lock); - if (stream->selected_sfd) { - if (stream->selected_sfd->kernelized) - return; - stream->selected_sfd->kernelized = true; - } + if (!stream->selected_sfd) + goto no_kernel; + + if (stream->selected_sfd->kernelized) + return; if (call->recording != NULL && !selected_recording_method->kernel_support) goto no_kernel; @@ -1941,8 +1941,6 @@ static void kernelize(struct packet_stream *stream) { goto no_kernel_warn; if (MEDIA_ISSET(media, GENERATOR)) goto no_kernel; - if (!stream->selected_sfd) - goto no_kernel; if (ML_ISSET(media->monologue, BLOCK_MEDIA) || CALL_ISSET(call, BLOCK_MEDIA)) goto no_kernel; if (!stream->endpoint.address.family) @@ -1967,14 +1965,14 @@ static void kernelize(struct packet_stream *stream) { continue; bool ok = kernelize_one_sink_handler(&s, stream, sh, false); if (!ok) - continue; // retry + goto retry; } // RTP egress mirrors for (__auto_type l = s.rtp_mirrors[mi]->head; l; l = l->next) { struct sink_handler *sh = l->data; bool ok = kernelize_one_sink_handler(&s, stream, sh, false); if (!ok) - continue; // retry + goto retry; } // RTP -> RTCP sinks // record number of RTP destinations up to now @@ -1986,7 +1984,7 @@ static void kernelize(struct packet_stream *stream) { struct sink_handler *sh = l->data; bool ok = kernelize_one_sink_handler(&s, stream, sh, true); if (!ok) - continue; // retry + goto retry; } // mark the end of RTCP outputs s.reti.media_output_idxs[mi].rtcp_end_idx = s.reti.num_destinations; @@ -2006,6 +2004,8 @@ static void kernelize(struct packet_stream *stream) { } stream->kernel_time_us = rtpe_now; + stream->selected_sfd->kernelized = true; + return; no_kernel_warn: @@ -2016,6 +2016,7 @@ no_kernel: PS_SET(stream, NO_KERNEL_SUPPORT); return; +retry:; } }