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>
19.0
Jaco Kroon 4 years ago committed by Friendly Automation
parent b742514553
commit caceba7988

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

Loading…
Cancel
Save