From 62e0af0957a6c7e3c2ea9711cf64ad51f4b2e594 Mon Sep 17 00:00:00 2001 From: lasseo Date: Tue, 21 Aug 2018 22:10:04 +0000 Subject: [PATCH] pua_reginfo: fix crash and issue during high load - do not release a already deleted entry, as this causes a crash - use sruid_next_safe instead of sruid_next as it has been seen during load that same sruid returned on multiple threads --- src/modules/pua_reginfo/notify.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/modules/pua_reginfo/notify.c b/src/modules/pua_reginfo/notify.c index 754a2ed0992..ea50f2db65f 100644 --- a/src/modules/pua_reginfo/notify.c +++ b/src/modules/pua_reginfo/notify.c @@ -111,7 +111,7 @@ int process_contact(udomain_t * domain, urecord_t ** ul_record, str aor, str cal ci.expires = time(0) + expires; /* set ruid */ - if(sruid_next(&_reginfo_sruid) < 0) { + if(sruid_next_safe(&_reginfo_sruid) < 0) { LM_ERR("failed to generate ruid"); } else { ci.ruid = _reginfo_sruid.uid; @@ -306,9 +306,15 @@ int process_body(str notify_body, udomain_t * domain) { } ul_contact = ul_contact->next; } + if (ul.delete_urecord(domain, &aor_key, ul_record) < 0) { LM_ERR("failed to remove record from usrloc\n"); - } + } + + /* Record deleted, and should not be used anymore */ + ul_record = NULL; + + /* If already a registration with contacts was found, then keep that result. otherwise the result is now "No contacts found" */ if (final_result != RESULT_CONTACTS_FOUND) final_result = RESULT_NO_CONTACTS;