[Asterisk-code-review] core: Ensure that el end is always run when needed. (asterisk[16])
Corey Farrell
asteriskteam at digium.com
Sun Nov 11 07:37:09 CST 2018
Corey Farrell has uploaded this change for review. ( https://gerrit.asterisk.org/10614
Change subject: core: Ensure that el_end is always run when needed.
......................................................................
core: Ensure that el_end is always run when needed.
* Ignore {{console=yes}} configuration option in remote console
processes.
* Use new flag to tell consolethread to run el_end and exit when needed.
ASTERISK-28158
Change-Id: I9e23b31d4211417ddc88c6bbfd83ea4c9f3e5438
---
M main/asterisk.c
M main/options.c
2 files changed, 17 insertions(+), 9 deletions(-)
git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/14/10614/1
diff --git a/main/asterisk.c b/main/asterisk.c
index 3354724..12e6255 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -389,6 +389,7 @@
unsigned int need_reload:1;
unsigned int need_quit:1;
unsigned int need_quit_handler:1;
+ unsigned int need_el_end:1;
} sig_flags;
#if !defined(LOW_MEMORY)
@@ -2015,10 +2016,9 @@
if (el_hist != NULL) {
history_end(el_hist);
}
- } else if (mon_sig_flags == pthread_self()) {
- if (consolethread != AST_PTHREADT_NULL) {
- pthread_kill(consolethread, SIGURG);
- }
+ } else {
+ sig_flags.need_el_end = 1;
+ pthread_kill(consolethread, SIGURG);
}
}
active_channels = ast_active_channels();
@@ -2635,7 +2635,7 @@
}
res = ast_poll(fds, max, -1);
if (res < 0) {
- if (sig_flags.need_quit || sig_flags.need_quit_handler) {
+ if (sig_flags.need_quit || sig_flags.need_quit_handler || sig_flags.need_el_end) {
break;
}
if (errno == EINTR) {
@@ -3163,7 +3163,7 @@
sprintf(tmp, "%s%s", prefix, data);
if (write(ast_consock, tmp, strlen(tmp) + 1) < 0) {
ast_log(LOG_ERROR, "write() failed: %s\n", strerror(errno));
- if (sig_flags.need_quit || sig_flags.need_quit_handler) {
+ if (sig_flags.need_quit || sig_flags.need_quit_handler || sig_flags.need_el_end) {
return;
}
}
@@ -3195,7 +3195,7 @@
char buffer[512] = "", *curline = buffer, *nextline;
int not_written = 1;
- if (sig_flags.need_quit || sig_flags.need_quit_handler) {
+ if (sig_flags.need_quit || sig_flags.need_quit_handler || sig_flags.need_el_end) {
break;
}
@@ -3255,7 +3255,7 @@
for (;;) {
ebuf = (char *)el_gets(el, &num);
- if (sig_flags.need_quit || sig_flags.need_quit_handler) {
+ if (sig_flags.need_quit || sig_flags.need_quit_handler || sig_flags.need_el_end) {
break;
}
@@ -4198,6 +4198,12 @@
el_set(el, EL_GETCFN, ast_el_read_char);
for (;;) {
+ if (sig_flags.need_el_end) {
+ el_end(el);
+
+ return;
+ }
+
if (sig_flags.need_quit || sig_flags.need_quit_handler) {
quit_handler(0, SHUTDOWN_FAST, 0);
break;
diff --git a/main/options.c b/main/options.c
index f6a4e8f..1da787f 100644
--- a/main/options.c
+++ b/main/options.c
@@ -322,7 +322,9 @@
ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_QUIET);
/* Run as console (-c at startup, implies nofork) */
} else if (!strcasecmp(v->name, "console")) {
- ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_NO_FORK | AST_OPT_FLAG_CONSOLE);
+ if (!ast_opt_remote) {
+ ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_NO_FORK | AST_OPT_FLAG_CONSOLE);
+ }
/* Run with high priority if the O/S permits (-p at startup) */
} else if (!strcasecmp(v->name, "highpriority")) {
ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_HIGH_PRIORITY);
--
To view, visit https://gerrit.asterisk.org/10614
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings
Gerrit-Project: asterisk
Gerrit-Branch: 16
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9e23b31d4211417ddc88c6bbfd83ea4c9f3e5438
Gerrit-Change-Number: 10614
Gerrit-PatchSet: 1
Gerrit-Owner: Corey Farrell <git at cfware.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20181111/c3f9c627/attachment.html>
More information about the asterisk-code-review
mailing list