func_lock: Fix requesters counter in error paths.

In two places we bail out with failure after we've already incremented
the requesters counter, if this occured then it would effectively result
in unload to wait indefinitely, thus preventing clean shutdown.

Change-Id: I362a6c0dc424f736d4a9c733d818e72d19675283
Signed-off-by: Jaco Kroon <jaco@uls.co.za>
This commit is contained in:
Jaco Kroon 2021-05-22 14:48:18 +02:00 committed by George Joseph
parent a611a0cd42
commit 6bd741b77d
1 changed files with 9 additions and 0 deletions

View File

@ -268,7 +268,13 @@ static int get_lock(struct ast_channel *chan, char *lockname, int trylock)
if (!clframe) {
if (unloading) {
ast_log(LOG_ERROR,
"Busy unloading. %sLOCK will fail.\n",
trylock ? "TRY" : "");
/* Don't bother */
ast_mutex_lock(&current->mutex);
current->requesters--;
ast_mutex_unlock(&current->mutex);
AST_LIST_UNLOCK(list);
return -1;
}
@ -277,6 +283,9 @@ static int get_lock(struct ast_channel *chan, char *lockname, int trylock)
ast_log(LOG_ERROR,
"Unable to allocate channel lock frame. %sLOCK will fail.\n",
trylock ? "TRY" : "");
ast_mutex_lock(&current->mutex);
current->requesters--;
ast_mutex_unlock(&current->mutex);
AST_LIST_UNLOCK(list);
return -1;
}