Browse Source

MT#55283 close recording SSRCs early

Instead of waiting for the garbage collector to clean up the SSRCs
objects, do it immediately when a delete is seen. This closes output
files and TLS connections more quickly.

Change-Id: I9a0a5be8194ba8597ff10e428d67d3a5654a2b62
pull/1546/head
Richard Fuchs 3 years ago
parent
commit
fd545cd8eb
3 changed files with 21 additions and 5 deletions
  1. +7
    -0
      recording-daemon/metafile.c
  2. +13
    -5
      recording-daemon/packet.c
  3. +1
    -0
      recording-daemon/packet.h

+ 7
- 0
recording-daemon/metafile.c View File

@ -47,6 +47,11 @@ static void meta_free(void *ptr) {
}
static void meta_close_ssrcs(gpointer key, gpointer value, gpointer user_data) {
ssrc_t *s = value;
ssrc_close(s);
}
// mf is locked
static void meta_destroy(metafile_t *mf) {
// close all streams
@ -64,6 +69,8 @@ static void meta_destroy(metafile_t *mf) {
close(mf->forward_fd);
mf->forward_fd = -1;
}
// shut down SSRCs, which closes TLS connections
g_hash_table_foreach(mf->ssrc_hash, meta_close_ssrcs, NULL);
db_close_call(mf);
}


+ 13
- 5
recording-daemon/packet.c View File

@ -84,6 +84,8 @@ static void packet_free(void *p) {
static void ssrc_tls_shutdown(ssrc_t *ssrc) {
if (!ssrc->tls_fwd_stream)
return;
streambuf_destroy(ssrc->tls_fwd_stream);
ssrc->tls_fwd_stream = NULL;
resample_shutdown(&ssrc->tls_fwd_resampler);
@ -142,14 +144,20 @@ void ssrc_tls_state(ssrc_t *ssrc) {
}
void ssrc_close(ssrc_t *s) {
output_close(s->metafile, s->output);
s->output = NULL;
for (int i = 0; i < G_N_ELEMENTS(s->decoders); i++) {
decoder_free(s->decoders[i]);
s->decoders[i] = NULL;
}
ssrc_tls_shutdown(s);
}
void ssrc_free(void *p) {
ssrc_t *s = p;
packet_sequencer_destroy(&s->sequencer);
output_close(s->metafile, s->output);
for (int i = 0; i < G_N_ELEMENTS(s->decoders); i++)
decoder_free(s->decoders[i]);
if (s->tls_fwd_stream)
ssrc_tls_shutdown(s);
ssrc_close(s);
g_slice_free1(sizeof(*s), s);
}


+ 1
- 0
recording-daemon/packet.h View File

@ -3,6 +3,7 @@
#include "types.h"
void ssrc_close(ssrc_t *s);
void ssrc_free(void *p);
void packet_process(stream_t *, unsigned char *, unsigned len);


Loading…
Cancel
Save