Properly fix a problem that occurs when you set PARKINGEXTEN to an exten where

a call is already parked.  (issue #9723, patch by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@64426 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Russell Bryant
2007-05-15 19:52:18 +00:00
parent 39ebbfe69d
commit 69cd2cb213

View File

@@ -305,23 +305,6 @@ static int metermaidstate(const char *data)
return AST_DEVICE_INUSE; return AST_DEVICE_INUSE;
} }
/*!
* \brief Check to see if a parking space is in use
* \return non-zero if in use, zero if not in use
* \note Assumes parking_lock is locked
*/
static int check_parking_space_inuse(int space)
{
struct parkeduser *pu;
for (pu = parkinglot; pu; pu = pu->next) {
if (pu->parkingnum == space)
return 1;
}
return 0;
}
/*! \brief Park a call /*! \brief Park a call
\note We put the user in the parking list, then wake up the parking thread to be sure it looks \note We put the user in the parking list, then wake up the parking thread to be sure it looks
after these channels too */ after these channels too */
@@ -342,17 +325,13 @@ int ast_park_call(struct ast_channel *chan, struct ast_channel *peer, int timeou
parkingexten = pbx_builtin_getvar_helper(chan, "PARKINGEXTEN"); parkingexten = pbx_builtin_getvar_helper(chan, "PARKINGEXTEN");
if (!ast_strlen_zero(parkingexten)) { if (!ast_strlen_zero(parkingexten)) {
if (ast_exists_extension(NULL, parking_con, parkingexten, 1, NULL)) { if (ast_exists_extension(NULL, parking_con, parkingexten, 1, NULL)) {
ast_mutex_unlock(&parking_lock);
free(pu);
ast_log(LOG_WARNING, "Requested parking extension already exists: %s@%s\n", parkingexten, parking_con); ast_log(LOG_WARNING, "Requested parking extension already exists: %s@%s\n", parkingexten, parking_con);
return 0; /* Continue execution if possible */ return 0; /* Continue execution if possible */
} }
ast_copy_string(pu->parkingexten, parkingexten, sizeof(pu->parkingexten)); ast_copy_string(pu->parkingexten, parkingexten, sizeof(pu->parkingexten));
x = atoi(parkingexten); x = atoi(parkingexten);
if (check_parking_space_inuse(x)) {
ast_mutex_unlock(&parking_lock);
free(pu);
ast_log(LOG_WARNING, "Requested parking space %d via PARKINGEXTEN, but it is in use!\n", x);
return -1;
}
} else { } else {
/* Select parking space within range */ /* Select parking space within range */
parking_range = parking_stop - parking_start+1; parking_range = parking_stop - parking_start+1;