/* we need this global to keep the DEBUG() syntax */
static struct ctdb_log_state *log_state;
+static int log_pid;
+
+/*
+ called when log data comes in from a child process
+ */
+static void ctdb_log_handler(struct event_context *ev, struct fd_event *fde,
+ uint16_t flags, void *private);
+
+static void ctdb_post_panic_logging(void)
+{
+ if (log_pid != getpid()) {
+ return;
+ }
+
+ if (log_state == NULL) {
+ return;
+ }
+
+ while (true) {
+ int ret;
+ int value = 0;
+
+ ret = ioctl(log_state->pfd, FIONREAD, &value);
+ if (ret == -1) {
+ break;
+ }
+
+ if (ret != 0) {
+ break;
+ }
+
+ if (value <= 0) {
+ break;
+ }
+
+ ctdb_log_handler(NULL, NULL, EVENT_FD_READ, log_state);
+ }
+}
/*
syslog logging function
ctdb->log->ctdb = ctdb;
log_state = ctdb->log;
+ log_pid = getpid();
if (use_syslog) {
do_debug_v = ctdb_syslog_log;
DEBUG(DEBUG_DEBUG, (__location__ " Created PIPE FD:%d for logging\n", p[0]));
+ post_panic_action_hook = ctdb_post_panic_logging;
+
return 0;
}