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:
Mark Spencer
2004-09-02 20:45:24 +00:00
parent 93818c761b
commit fd7577eed2
5 changed files with 25 additions and 14 deletions

View File

@@ -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)

View File

@@ -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
View File

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

View File

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

View File

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