blob: 5964214ffc4e059b2a7b4e06a161cd9672feae84 [file] [log] [blame]
diff -rup upstart-1.2~/init/job_process.c upstart-1.2/init/job_process.c
--- upstart-1.2~/init/job_process.c 2011-03-22 10:18:00.000000000 -0700
+++ upstart-1.2/init/job_process.c 2013-07-30 17:24:03.663026253 -0700
@@ -1074,11 +1074,11 @@ job_process_terminated (Job *job
* the exit signal or status is in that list, and only
* if not, do we consider it failed.
*
- * For services that can be respawned, a zero exit status is
- * also a failure unless listed.
+ * For services, a zero exit status is also a failure
+ * unless listed.
*/
- if (status || (job->class->respawn && (! job->class->task)))
- {
+ if ((status || (! job->class->task))
+ && (job->goal == JOB_START)) {
failed = TRUE;
for (size_t i = 0; i < job->class->normalexit_len; i++) {
if (job->class->normalexit[i] == status) {
diff -rup upstart-1.2~/init/tests/test_job_process.c upstart-1.2/init/tests/test_job_process.c
--- upstart-1.2~/init/tests/test_job_process.c 2011-03-16 15:17:44.000000000 -0700
+++ upstart-1.2/init/tests/test_job_process.c 2013-07-30 17:27:56.733675356 -0700
@@ -1270,7 +1270,7 @@ test_handler (void)
/* Check that we can handle the running task of the job terminating,
* which should set the goal to stop and transition a state change
- * into the stopping state. This should not be considered a failure.
+ * into the stopping state.
*/
TEST_FEATURE ("with running process");
TEST_ALLOC_FAIL {
@@ -1301,13 +1301,11 @@ test_handler (void)
TEST_EQ (job->state, JOB_STOPPING);
TEST_EQ (job->pid[PROCESS_MAIN], 0);
- TEST_EQ (event->blockers, 1);
- TEST_EQ (event->failed, FALSE);
+ TEST_EQ (event->blockers, 0);
+ TEST_EQ (event->failed, TRUE);
- TEST_LIST_NOT_EMPTY (&job->blocking);
- TEST_NOT_FREE (blocked);
- TEST_EQ_P (blocked->event, event);
- event_unblock (event);
+ TEST_LIST_EMPTY (&job->blocking);
+ TEST_FREE (blocked);
TEST_NE_P (job->blocker, NULL);
@@ -1322,8 +1320,8 @@ test_handler (void)
TEST_LIST_EMPTY (&job->blocker->blocking);
- TEST_EQ (job->failed, FALSE);
- TEST_EQ (job->failed_process, (ProcessType)-1);
+ TEST_EQ (job->failed, TRUE);
+ TEST_EQ (job->failed_process, PROCESS_MAIN);
TEST_EQ (job->exit_status, 0);
nih_free (job);
@@ -2406,7 +2404,7 @@ test_handler (void)
/* A running task exiting with the zero exit code is considered
- * a normal termination if not marked respawn.
+ * a failed termination.
*/
TEST_FEATURE ("with running task and zero exit");
TEST_ALLOC_FAIL {
@@ -2437,13 +2435,11 @@ test_handler (void)
TEST_EQ (job->state, JOB_STOPPING);
TEST_EQ (job->pid[PROCESS_MAIN], 0);
- TEST_EQ (event->blockers, 1);
- TEST_EQ (event->failed, FALSE);
+ TEST_EQ (event->blockers, 0);
+ TEST_EQ (event->failed, TRUE);
- TEST_LIST_NOT_EMPTY (&job->blocking);
- TEST_NOT_FREE (blocked);
- TEST_EQ_P (blocked->event, event);
- event_unblock (event);
+ TEST_LIST_EMPTY (&job->blocking);
+ TEST_FREE (blocked);
TEST_NE_P (job->blocker, NULL);
@@ -2458,8 +2454,8 @@ test_handler (void)
TEST_LIST_EMPTY (&job->blocker->blocking);
- TEST_EQ (job->failed, FALSE);
- TEST_EQ (job->failed_process, (ProcessType)-1);
+ TEST_EQ (job->failed, TRUE);
+ TEST_EQ (job->failed_process, PROCESS_MAIN);
TEST_EQ (job->exit_status, 0);
nih_free (job);
@@ -2719,13 +2715,11 @@ test_handler (void)
TEST_EQ (job->state, JOB_STOPPING);
TEST_EQ (job->pid[PROCESS_MAIN], 0);
- TEST_EQ (event->blockers, 1);
- TEST_EQ (event->failed, FALSE);
+ TEST_EQ (event->blockers, 0);
+ TEST_EQ (event->failed, TRUE);
- TEST_LIST_NOT_EMPTY (&job->blocking);
- TEST_NOT_FREE (blocked);
- TEST_EQ_P (blocked->event, event);
- event_unblock (event);
+ TEST_LIST_EMPTY (&job->blocking);
+ TEST_FREE (blocked);
TEST_NE_P (job->blocker, NULL);
@@ -2740,8 +2734,8 @@ test_handler (void)
TEST_LIST_EMPTY (&job->blocker->blocking);
- TEST_EQ (job->failed, FALSE);
- TEST_EQ (job->failed_process, (ProcessType)-1);
+ TEST_EQ (job->failed, TRUE);
+ TEST_EQ (job->failed_process, PROCESS_MAIN);
TEST_EQ (job->exit_status, 0);
nih_free (job);
@@ -2790,18 +2784,16 @@ test_handler (void)
TEST_EQ (job->pid[PROCESS_MAIN], 0);
TEST_EQ (job->pid[PROCESS_POST_START], 2);
- TEST_EQ (event->blockers, 1);
- TEST_EQ (event->failed, FALSE);
+ TEST_EQ (event->blockers, 0);
+ TEST_EQ (event->failed, TRUE);
TEST_EQ_P (job->blocker, NULL);
- TEST_LIST_NOT_EMPTY (&job->blocking);
- TEST_NOT_FREE (blocked);
- TEST_EQ_P (blocked->event, event);
- event_unblock (event);
+ TEST_LIST_EMPTY (&job->blocking);
+ TEST_FREE (blocked);
- TEST_EQ (job->failed, FALSE);
- TEST_EQ (job->failed_process, (ProcessType)-1);
+ TEST_EQ (job->failed, TRUE);
+ TEST_EQ (job->failed_process, PROCESS_MAIN);
TEST_EQ (job->exit_status, 0);
nih_free (job);
@@ -2850,17 +2842,16 @@ test_handler (void)
TEST_EQ (job->pid[PROCESS_MAIN], 0);
TEST_EQ (job->pid[PROCESS_POST_START], 2);
- TEST_EQ (event->blockers, 1);
- TEST_EQ (event->failed, FALSE);
+ TEST_EQ (event->blockers, 0);
+ TEST_EQ (event->failed, TRUE);
TEST_EQ_P (job->blocker, NULL);
- TEST_LIST_NOT_EMPTY (&job->blocking);
- TEST_NOT_FREE (blocked);
- TEST_EQ_P (blocked->event, event);
+ TEST_LIST_EMPTY (&job->blocking);
+ TEST_FREE (blocked);
- TEST_EQ (job->failed, FALSE);
- TEST_EQ (job->failed_process, (ProcessType)-1);
+ TEST_EQ (job->failed, TRUE);
+ TEST_EQ (job->failed_process, PROCESS_MAIN);
TEST_EQ (job->exit_status, 0);
job_process_handler (NULL, 2, NIH_CHILD_EXITED, 0);
@@ -2870,13 +2861,8 @@ test_handler (void)
TEST_EQ (job->pid[PROCESS_MAIN], 0);
TEST_EQ (job->pid[PROCESS_POST_START], 0);
- TEST_EQ (event->blockers, 1);
- TEST_EQ (event->failed, FALSE);
-
- TEST_LIST_NOT_EMPTY (&job->blocking);
- TEST_NOT_FREE (blocked);
- TEST_EQ_P (blocked->event, event);
- event_unblock (event);
+ TEST_EQ (event->blockers, 0);
+ TEST_EQ (event->failed, TRUE);
TEST_NE_P (job->blocker, NULL);
@@ -2891,8 +2877,8 @@ test_handler (void)
TEST_LIST_EMPTY (&job->blocker->blocking);
- TEST_EQ (job->failed, FALSE);
- TEST_EQ (job->failed_process, (ProcessType)-1);
+ TEST_EQ (job->failed, TRUE);
+ TEST_EQ (job->failed_process, PROCESS_MAIN);
TEST_EQ (job->exit_status, 0);
nih_free (job);