Merged revisions 133945-133946 via svnmerge from

https://origsvn.digium.com/svn/asterisk/trunk

........
r133945 | russell | 2008-07-26 10:15:14 -0500 (Sat, 26 Jul 2008) | 6 lines

ast_device_state() gets called in two different ways.  The first way is when
called from elsewhere in Asterisk to find the current state of a device.  In
that case, we want to use the cached value if it exists.  The other way is when
processing a device state change.  In that case, we do not want to check the
cache because returning the last known state is counter productive.

........
r133946 | russell | 2008-07-26 10:16:20 -0500 (Sat, 26 Jul 2008) | 1 line

actually use the cache_cache argument
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.0@133947 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Russell Bryant
2008-07-26 15:17:46 +00:00
parent c34ad0f0a3
commit 42cf9fc54e

View File

@@ -286,7 +286,7 @@ static enum ast_device_state devstate_cached(const char *device)
}
/*! \brief Check device state through channel specific function or generic function */
enum ast_device_state ast_device_state(const char *device)
static enum ast_device_state _ast_device_state(const char *device, int check_cache)
{
char *buf;
char *number;
@@ -298,9 +298,12 @@ enum ast_device_state ast_device_state(const char *device)
char *provider = NULL;
/* If the last known state is cached, just return that */
res = devstate_cached(device);
if (res != AST_DEVICE_UNKNOWN)
return res;
if (check_cache) {
res = devstate_cached(device);
if (res != AST_DEVICE_UNKNOWN) {
return res;
}
}
buf = ast_strdupa(device);
tech = strsep(&buf, "/");
@@ -338,6 +341,14 @@ enum ast_device_state ast_device_state(const char *device)
return res;
}
enum ast_device_state ast_device_state(const char *device)
{
/* This function is called from elsewhere in the code to find out the
* current state of a device. Check the cache, first. */
return _ast_device_state(device, 1);
}
/*! \brief Add device state provider */
int ast_devstate_prov_add(const char *label, ast_devstate_prov_cb_type callback)
{
@@ -425,7 +436,7 @@ static void do_state_change(const char *device)
{
enum ast_device_state state;
state = ast_device_state(device);
state = _ast_device_state(device, 0);
ast_debug(3, "Changing state for %s - state %d (%s)\n", device, state, devstate2str(state));