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 b4e77b7f10
commit 5008d9fee1

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;
}