mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-10 06:49:40 +00:00
Don't try to look offhook with channel banks & Loopstart (bug #2362), also make individual modules reloadable...
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3714 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -446,7 +446,7 @@ static void hup_handler(int num)
|
|||||||
if (restartnow)
|
if (restartnow)
|
||||||
execvp(_argv[0], _argv);
|
execvp(_argv[0], _argv);
|
||||||
/* XXX This could deadlock XXX */
|
/* XXX This could deadlock XXX */
|
||||||
ast_module_reload();
|
ast_module_reload(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void child_handler(int sig)
|
static void child_handler(int sig)
|
||||||
|
@@ -6291,6 +6291,8 @@ static inline int available(struct zt_pvt *p, int channelmatch, int groupmatch,
|
|||||||
#endif
|
#endif
|
||||||
if (!p->radio)
|
if (!p->radio)
|
||||||
{
|
{
|
||||||
|
if (!p->sig || (p->sig == SIG_FXSLS))
|
||||||
|
return 1;
|
||||||
/* Check hook state */
|
/* Check hook state */
|
||||||
if (p->subs[SUB_REAL].zfd > -1)
|
if (p->subs[SUB_REAL].zfd > -1)
|
||||||
res = ioctl(p->subs[SUB_REAL].zfd, ZT_GET_PARAMS, &par);
|
res = ioctl(p->subs[SUB_REAL].zfd, ZT_GET_PARAMS, &par);
|
||||||
@@ -6301,10 +6303,12 @@ static inline int available(struct zt_pvt *p, int channelmatch, int groupmatch,
|
|||||||
}
|
}
|
||||||
if (res) {
|
if (res) {
|
||||||
ast_log(LOG_WARNING, "Unable to check hook state on channel %d\n", p->channel);
|
ast_log(LOG_WARNING, "Unable to check hook state on channel %d\n", p->channel);
|
||||||
} else if ((p->sig == SIG_FXSKS) || (p->sig == SIG_FXSLS) ||
|
} else if ((p->sig == SIG_FXSKS) || (p->sig == SIG_FXSGS)) {
|
||||||
(p->sig == SIG_FXSGS) || !p->sig) {
|
|
||||||
/* When "onhook" that means no battery on the line, and thus
|
/* When "onhook" that means no battery on the line, and thus
|
||||||
it is out of service... */
|
it is out of service..., if it's on a TDM card... If it's a channel
|
||||||
|
bank, there is no telling... */
|
||||||
|
if (par.rxbits > -1)
|
||||||
|
return 1;
|
||||||
if (par.rxisoffhook)
|
if (par.rxisoffhook)
|
||||||
return 1;
|
return 1;
|
||||||
else
|
else
|
||||||
|
9
cli.c
9
cli.c
@@ -109,9 +109,14 @@ static int handle_load(int fd, int argc, char *argv[])
|
|||||||
|
|
||||||
static int handle_reload(int fd, int argc, char *argv[])
|
static int handle_reload(int fd, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
if (argc != 1)
|
int x;
|
||||||
|
if (argc < 1)
|
||||||
return RESULT_SHOWUSAGE;
|
return RESULT_SHOWUSAGE;
|
||||||
ast_module_reload();
|
if (argc > 1) {
|
||||||
|
for (x=1;x<argc;x++)
|
||||||
|
ast_module_reload(argv[x]);
|
||||||
|
} else
|
||||||
|
ast_module_reload(NULL);
|
||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -138,7 +138,7 @@ int ast_loader_unregister(int (*updater)(void));
|
|||||||
* This reloads all modules set to load in asterisk. It does NOT run the unload
|
* This reloads all modules set to load in asterisk. It does NOT run the unload
|
||||||
* routine and then loads them again, it runs the given reload routine.
|
* routine and then loads them again, it runs the given reload routine.
|
||||||
*/
|
*/
|
||||||
void ast_module_reload(void);
|
void ast_module_reload(const char *name);
|
||||||
|
|
||||||
int ast_register_atexit(void (*func)(void));
|
int ast_register_atexit(void (*func)(void));
|
||||||
void ast_unregister_atexit(void (*func)(void));
|
void ast_unregister_atexit(void (*func)(void));
|
||||||
|
16
loader.c
16
loader.c
@@ -3,9 +3,9 @@
|
|||||||
*
|
*
|
||||||
* Module Loader
|
* Module Loader
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999, Mark Spencer
|
* Copyright (C) 1999-2004, Digium, Inc.
|
||||||
*
|
*
|
||||||
* Mark Spencer <markster@linux-support.net>
|
* Mark Spencer <markster@digium.com>
|
||||||
*
|
*
|
||||||
* This program is free software, distributed under the terms of
|
* This program is free software, distributed under the terms of
|
||||||
* the GNU General Public License
|
* the GNU General Public License
|
||||||
@@ -147,7 +147,7 @@ int ast_unload_resource(char *resource_name, int force)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ast_module_reload(void)
|
void ast_module_reload(const char *name)
|
||||||
{
|
{
|
||||||
struct module *m;
|
struct module *m;
|
||||||
|
|
||||||
@@ -166,10 +166,12 @@ void ast_module_reload(void)
|
|||||||
ast_mutex_lock(&modlock);
|
ast_mutex_lock(&modlock);
|
||||||
m = module_list;
|
m = module_list;
|
||||||
while(m) {
|
while(m) {
|
||||||
if (m->reload) {
|
if (!name || !strcasecmp(name, m->resource)) {
|
||||||
if (option_verbose > 2)
|
if (m->reload) {
|
||||||
ast_verbose(VERBOSE_PREFIX_3 "Reloading module '%s' (%s)\n", m->resource, m->description());
|
if (option_verbose > 2)
|
||||||
m->reload();
|
ast_verbose(VERBOSE_PREFIX_3 "Reloading module '%s' (%s)\n", m->resource, m->description());
|
||||||
|
m->reload();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
m = m->next;
|
m = m->next;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user