[Asterisk-code-review] devicestate: Cleanup engine thread during graceful shutdown. (asterisk[master])
Corey Farrell
asteriskteam at digium.com
Sun Jan 10 17:16:28 CST 2016
Corey Farrell has uploaded a new change for review.
https://gerrit.asterisk.org/1987
Change subject: devicestate: Cleanup engine thread during graceful shutdown.
......................................................................
devicestate: Cleanup engine thread during graceful shutdown.
ASTERISK-25681 #close
Change-Id: I64337c70f0ebd8c77f70792042684607c950c8f1
---
M main/devicestate.c
1 file changed, 15 insertions(+), 1 deletion(-)
git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/87/1987/1
diff --git a/main/devicestate.c b/main/devicestate.c
index aba6159..400d655 100644
--- a/main/devicestate.c
+++ b/main/devicestate.c
@@ -214,6 +214,7 @@
/*! \brief Flag for the queue */
static ast_cond_t change_pending;
+static volatile int shuttingdown;
struct stasis_subscription *devstate_message_sub;
@@ -548,7 +549,7 @@
{
struct state_change *next, *current;
- for (;;) {
+ while (!shuttingdown) {
/* This basically pops off any state change entries, resets the list back to NULL, unlocks, and processes each state change */
AST_LIST_LOCK(&state_changes);
if (AST_LIST_EMPTY(&state_changes))
@@ -626,6 +627,18 @@
device_state->cachable, NULL);
}
+static void device_state_engine_cleanup(void)
+{
+ shuttingdown = 1;
+ AST_LIST_LOCK(&state_changes);
+ ast_cond_signal(&change_pending);
+ AST_LIST_UNLOCK(&state_changes);
+
+ if (change_thread != AST_PTHREADT_NULL) {
+ pthread_join(change_thread, NULL);
+ }
+}
+
/*! \brief Initialize the device state engine in separate thread */
int ast_device_state_engine_init(void)
{
@@ -634,6 +647,7 @@
ast_log(LOG_ERROR, "Unable to start device state change thread.\n");
return -1;
}
+ ast_register_cleanup(device_state_engine_cleanup);
return 0;
}
--
To view, visit https://gerrit.asterisk.org/1987
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I64337c70f0ebd8c77f70792042684607c950c8f1
Gerrit-PatchSet: 1
Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Owner: Corey Farrell <git at cfware.com>
More information about the asterisk-code-review
mailing list