From e2d4da995be96b650e78847a3417d7756d46f4e0 Mon Sep 17 00:00:00 2001 From: Donat Zenichev Date: Mon, 12 Feb 2024 10:30:31 +0100 Subject: [PATCH] MT#59038 Fix a defect detected by Coverity Scan (dtmf) Fix for: *** CID 1583598: Program hangs (LOCK) /daemon/dtmf.c: 937 in dtmf_trigger_do_pause_resume_rec() 931 codec_timer_callback(ml->call, dtmf_trigger_do_pause_rec, ml, 0); 932 } 933 934 static void dtmf_trigger_do_pause_resume_rec(call_t *c, codec_timer_callback_arg_t a) { 935 rwlock_lock_w(&c->master_lock); 936 if (!c->recording) >>> CID 1583598: Program hangs (LOCK) >>> Returning without unlocking "c->master_lock". 937 return; 938 if (CALL_SET(c, RECORDING_ON)) 939 recording_pause(c); 940 else 941 recording_start(c); 942 rwlock_unlock_w(&c->master_lock); Change-Id: I7bab7de7e67fdcb7136b3b7dbb61584b0d05f829 --- daemon/dtmf.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/daemon/dtmf.c b/daemon/dtmf.c index 4fd4afb47..959f0c619 100644 --- a/daemon/dtmf.c +++ b/daemon/dtmf.c @@ -933,8 +933,10 @@ static void dtmf_trigger_pause_rec(struct call_media *media, struct call_monolog static void dtmf_trigger_do_pause_resume_rec(call_t *c, codec_timer_callback_arg_t a) { rwlock_lock_w(&c->master_lock); - if (!c->recording) + if (!c->recording) { + rwlock_unlock_w(&c->master_lock); return; + } if (CALL_SET(c, RECORDING_ON)) recording_pause(c); else