diff --git a/daemon/call.c b/daemon/call.c index 349f5cfbf..72eb7e5a4 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -2220,10 +2220,9 @@ void call_destroy(struct call *c) { if (c->recording != NULL) { recording_finish_file(c->recording); - free(c->recording->metadata); + meta_finish_file(c); + g_slice_free1(sizeof(*(c->recording)), c->recording); } - meta_finish_file(c); - g_slice_free1(sizeof(*(c->recording)), c->recording); rwlock_unlock_w(&c->master_lock); diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index 449779707..98e7e9b1c 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -698,7 +698,9 @@ static const char *call_offer_answer_ng(bencode_item_t *input, struct callmaster } bencode_dictionary_get_str(input, "metadata", &metadata); if (metadata.len > 0) { - free(call->recording->metadata); + if (call->recording->metadata != NULL) { + free(call->recording->metadata); + } call->recording->metadata = str_dup(&metadata); } } else { diff --git a/daemon/recording.c b/daemon/recording.c index 604a3987f..00bc06767 100644 --- a/daemon/recording.c +++ b/daemon/recording.c @@ -151,6 +151,7 @@ int meta_finish_file(struct call *call) { // Print metadata fprintf(recording->meta_fp, "\n%s\n", recording->metadata->s); + free(recording->metadata); fclose(recording->meta_fp); // Get the filename (in between its directory and the file extension)