Browse Source

MT#55283 fix deadlock retry logic

Change-Id: I6f4162f724e527828f4f14e26746dff7d43562f5
master
Richard Fuchs 3 days ago
parent
commit
fede2a051e
1 changed files with 11 additions and 10 deletions
  1. +11
    -10
      daemon/media_socket.c

+ 11
- 10
daemon/media_socket.c View File

@ -1926,11 +1926,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;
@ -1940,8 +1940,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)
@ -1966,14 +1964,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
@ -1985,7 +1983,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;
@ -2005,6 +2003,8 @@ static void kernelize(struct packet_stream *stream) {
}
stream->kernel_time_us = rtpe_now;
stream->selected_sfd->kernelized = true;
return;
no_kernel_warn:
@ -2015,6 +2015,7 @@ no_kernel:
PS_SET(stream, NO_KERNEL_SUPPORT);
return;
retry:;
}
}


Loading…
Cancel
Save