Merged revisions 64426 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r64426 | russell | 2007-05-15 14:52:18 -0500 (Tue, 15 May 2007) | 3 lines

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/trunk@64427 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Russell Bryant 2007-05-15 19:57:02 +00:00
parent 5a482485f0
commit 16a9f0844f
1 changed files with 2 additions and 23 deletions

View File

@ -336,23 +336,6 @@ static enum ast_device_state 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 */
@ -373,17 +356,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;