return 0;
}
+/*!
+ * Send any applicable events to the client listening on this socket
+ */
static int process_events(struct mansession *s)
{
int ret = 0;
astman_send_error(s, m, "Invalid/unknown command");
if (ret)
return ret;
+ /* Once done with our message, deliver any pending events */
return process_events(s);
}
ast_mutex_unlock(&s->__lock);
}
if (res < 0) {
+ /* If we get a signal from some other thread (typically because
+ * there are new events queued), return 0 to notify the caller.
+ */
if (errno == EINTR)
return 0;
ast_log(LOG_WARNING, "poll() returned error: %s\n", strerror(errno));
}
/*! \brief The body of the individual manager session.
+ * Call get_input() to read one line at a time
+ * (or be woken up on new events), collect the lines in a
+ * message until found an empty line, and execute the request.
+ * In any case, deliver events asynchronously through process_events()
+ * (called from here if no line is available, or at the end of
+ * process_message(). )
*/
static void *session_do(void *data)
{