From 42284d4fa2af58058c37cfe8b8f1263f2f5f6fe4 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 7 Mar 2023 10:17:24 -0500 Subject: [PATCH] MT#56856 support the new REMG_DEL_TARGET_STATS Instead of doing two calls to the kernel every time a forwarding stream is deleted (one to update the stats and one to delete), combine these two into a single call using REMG_DEL_TARGET_STATS. Change-Id: I9fcb148930c24bc866f842a50edd613fb6296de0 --- daemon/kernel.c | 8 +++----- daemon/media_socket.c | 9 ++++----- include/kernel.h | 2 +- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/daemon/kernel.c b/daemon/kernel.c index 9e6caed87..e5d756bfe 100644 --- a/daemon/kernel.c +++ b/daemon/kernel.c @@ -176,17 +176,15 @@ int kernel_add_destination(struct rtpengine_destination_info *mdi) { } -int kernel_del_stream(const struct re_address *a) { - struct rtpengine_command_del_target cmd; +int kernel_del_stream_stats(struct rtpengine_command_del_target_stats *cmd) { ssize_t ret; if (!kernel.is_open) return -1; - cmd.cmd = REMG_DEL_TARGET; - cmd.local = *a; + cmd->cmd = REMG_DEL_TARGET_STATS; - ret = write(kernel.fd, &cmd, sizeof(cmd)); + ret = read(kernel.fd, cmd, sizeof(*cmd)); if (ret > 0) return 0; diff --git a/daemon/media_socket.c b/daemon/media_socket.c index 5f781adfc..bb2ac45e5 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -1754,8 +1754,6 @@ static void __stream_update_stats(struct packet_stream *ps, bool have_in_lock) { /* must be called with in_lock held or call->master_lock held in W */ void __unkernelize(struct packet_stream *p, const char *reason) { - struct re_address rea; - reset_ps_kernel_stats(p); if (!p->selected_sfd) @@ -1768,9 +1766,10 @@ void __unkernelize(struct packet_stream *p, const char *reason) { ilog(LOG_INFO, "Removing media stream from kernel: local %s (%s)", endpoint_print_buf(&p->selected_sfd->socket.local), reason); - __stream_update_stats(p, true); - __re_address_translate_ep(&rea, &p->selected_sfd->socket.local); - kernel_del_stream(&rea); + struct rtpengine_command_del_target_stats cmd; + __re_address_translate_ep(&cmd.local, &p->selected_sfd->socket.local); + if (kernel_del_stream_stats(&cmd) == 0) + __stream_consume_stats(p, &cmd.stats); } PS_CLEAR(p, KERNELIZED); diff --git a/include/kernel.h b/include/kernel.h index b63ea5e96..d81cfff1c 100644 --- a/include/kernel.h +++ b/include/kernel.h @@ -37,7 +37,7 @@ int kernel_setup_table(unsigned int); int kernel_add_stream(struct rtpengine_target_info *); int kernel_add_destination(struct rtpengine_destination_info *); -int kernel_del_stream(const struct re_address *); +int kernel_del_stream_stats(struct rtpengine_command_del_target_stats *); GList *kernel_list(void); int kernel_update_stats(struct rtpengine_command_stats *);