/* * This function simply stops the service p. * @param s A Service_T object * @return TRUE if the service was stopped otherwise FALSE */ static int do_stop(Service_T s) { ASSERT(s); if (s->depend_visited) return TRUE; s->depend_visited = TRUE; /* do soft unmonitor - start counter and error state is kept */ if (s->monitor != MONITOR_NOT) { s->monitor = MONITOR_NOT; DEBUG("Monitoring disabled -- service %s\n", s->name); } if (s->stop && (s->type!=TYPE_PROCESS || Util_isProcessRunning(s))) { LogInfo("'%s' stop: %s\n", s->name, s->stop->arg[0]); spawn(s, s->stop, NULL); if (s->type == TYPE_PROCESS) { /* Only wait for process service types */ if (!wait_stop(s)) return FALSE; } } Util_resetInfo(s); return TRUE; }
/* * This function simply stops the service p. * @param s A Service_T object * @param flag TRUE if the monitoring should be disabled or FALSE if monitoring should continue (when stop is part of restart) * @return TRUE if the service was stopped otherwise FALSE */ static int do_stop(Service_T s, int flag) { int rv = TRUE; ASSERT(s); if (s->depend_visited) return rv; s->depend_visited = TRUE; if (s->stop) { if (s->type != TYPE_PROCESS || Util_isProcessRunning(s, FALSE)) { LogInfo("'%s' stop: %s\n", s->name, s->stop->arg[0]); spawn(s, s->stop, NULL); if (s->type == TYPE_PROCESS && (wait_process(s, Process_Stopped) != Process_Stopped)) // Only wait for process service types stop rv = FALSE; } } else { LogDebug("'%s' stop skipped -- method not defined\n", s->name); } if (flag) Util_monitorUnset(s); else Util_resetInfo(s); return rv; }