From b7f908e8907a143bac52cbd2903c17a98e450d0c Mon Sep 17 00:00:00 2001
From: Andrey Volk <andywolk@gmail.com>
Date: Fri, 8 Oct 2021 20:24:43 +0300
Subject: [PATCH] [mod_sofia] Destroy nua handles to avoid memory pool swell
 when system is unavailable (busy, paused or reached internal limits)

---
 src/mod/endpoints/mod_sofia/sofia.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c
index 36f3087db1..5066a13ef8 100644
--- a/src/mod/endpoints/mod_sofia/sofia.c
+++ b/src/mod/endpoints/mod_sofia/sofia.c
@@ -2462,17 +2462,20 @@ void sofia_event_callback(nua_event_t event,
 		if (!sofia_private) {
 			if (sess_count >= sess_max || !sofia_test_pflag(profile, PFLAG_RUNNING) || !switch_core_ready_inbound()) {
 				nua_respond(nh, 503, "Maximum Calls In Progress", SIPTAG_RETRY_AFTER_STR("300"), NUTAG_WITH_THIS(nua), TAG_END());
+				nua_handle_destroy(nh);
 				goto end;
 			}
 
 
 			if (switch_queue_size(mod_sofia_globals.msg_queue) > (unsigned int)critical) {
 				nua_respond(nh, 503, "System Busy", SIPTAG_RETRY_AFTER_STR("300"), NUTAG_WITH_THIS(nua), TAG_END());
+				nua_handle_destroy(nh);
 				goto end;
 			}
 
 			if (sofia_test_pflag(profile, PFLAG_STANDBY)) {
 				nua_respond(nh, 503, "System Paused", NUTAG_WITH_THIS(nua), TAG_END());
+				nua_handle_destroy(nh);
 				goto end;
 			}
 		}