James Hunt has proposed merging lp:~jamesodhunt/upstart/bug-1222705 into lp:upstart.
Requested reviews: Upstart Reviewers (upstart-reviewers) Related bugs: Bug #1222705 in upstart : "init assert failure: alloc.c:633: Assertion failed in nih_unref: ref != NULL" https://bugs.launchpad.net/upstart/+bug/1222705 For more details, see: https://code.launchpad.net/~jamesodhunt/upstart/bug-1222705/+merge/204222 -- https://code.launchpad.net/~jamesodhunt/upstart/bug-1222705/+merge/204222 Your team Upstart Reviewers is requested to review the proposed merge of lp:~jamesodhunt/upstart/bug-1222705 into lp:upstart.
=== modified file 'ChangeLog' --- ChangeLog 2014-01-22 11:16:20 +0000 +++ ChangeLog 2014-01-31 12:43:20 +0000 @@ -1,3 +1,10 @@ +2014-01-31 James Hunt <[email protected]> + + * init/job_class.c: job_class_stop(): Copy env rather than + referencing a local variable (LP: #1222705). + * init/tests/test_job_class.c: test_start(), test_stop(), + test_restart(): Check job->env, job->start_env and job->stop-env. + 2014-01-22 James Hunt <[email protected]> * init/main.c: logger_kmsg(): Use open(2) rather than fopen(3) to avoid === modified file 'init/job_class.c' --- init/job_class.c 2014-01-17 12:03:24 +0000 +++ init/job_class.c 2014-01-31 12:43:20 +0000 @@ -1241,8 +1241,9 @@ if (job->stop_env) nih_unref (job->stop_env, job); - job->stop_env = (char **)env; - nih_ref (job->stop_env, job); + job->stop_env = nih_str_array_copy (job, NULL, env); + if (! job->stop_env) + nih_return_system_error (-1); job_finished (job, FALSE); if (blocked) === modified file 'init/tests/test_job_class.c' --- init/tests/test_job_class.c 2013-07-21 23:54:16 +0000 +++ init/tests/test_job_class.c 2014-01-31 12:43:20 +0000 @@ -1569,6 +1569,16 @@ TEST_EQ (job->goal, JOB_START); TEST_EQ (job->state, JOB_STARTING); + TEST_EQ_P (job->start_env, NULL); + TEST_EQ_P (job->stop_env, NULL); + + TEST_NE_P (job->env, NULL); + TEST_EQ_STRN (job->env[0], "PATH="); + TEST_EQ_STRN (job->env[1], "TERM="); + TEST_EQ_P (job->env[2], NULL); + + TEST_NE_P (job->env, env); + TEST_LIST_NOT_EMPTY (&job->blocking); blocked = (Blocked *)job->blocking.next; @@ -1664,6 +1674,15 @@ TEST_LIST_EMPTY (&job->blocking); + TEST_EQ_P (job->start_env, NULL); + TEST_EQ_P (job->stop_env, NULL); + + TEST_NE_P (job->env, NULL); + TEST_EQ_STRN (job->env[0], "PATH="); + TEST_EQ_STRN (job->env[1], "TERM="); + TEST_EQ_P (job->env[2], NULL); + + TEST_NE_P (job->env, env); dbus_connection_flush (conn); @@ -1746,6 +1765,16 @@ TEST_EQ (job->goal, JOB_START); TEST_EQ (job->state, JOB_STOPPING); + TEST_EQ_P (job->env, NULL); + TEST_EQ_P (job->stop_env, NULL); + + TEST_NE_P (job->start_env, NULL); + TEST_EQ_STRN (job->start_env[0], "PATH="); + TEST_EQ_STRN (job->start_env[1], "TERM="); + TEST_EQ_P (job->start_env[2], NULL); + + TEST_NE_P (job->start_env, env); + TEST_LIST_NOT_EMPTY (&job->blocking); blocked = (Blocked *)job->blocking.next; @@ -1906,12 +1935,18 @@ TEST_EQ (job->goal, JOB_START); TEST_EQ (job->state, JOB_STARTING); + TEST_NE_P (job->start_env, env); + TEST_NE_P (job->stop_env, env); + + TEST_NE_P (job->env, NULL); TEST_EQ_STRN (job->env[0], "PATH="); TEST_EQ_STRN (job->env[1], "TERM="); TEST_EQ_STR (job->env[2], "FOO=wibble"); TEST_EQ_STR (job->env[3], "BAR=wobble"); TEST_EQ_P (job->env[4], NULL); + TEST_NE_P (job->env, env); + TEST_LIST_NOT_EMPTY (&job->blocking); blocked = (Blocked *)job->blocking.next; @@ -2087,6 +2122,14 @@ TEST_NOT_FREE (job); + TEST_EQ_P (job->env, NULL); + TEST_EQ_P (job->start_env, NULL); + + TEST_NE_P (job->stop_env, NULL); + TEST_EQ_P (job->stop_env[0], NULL); + + TEST_NE_P (job->stop_env, env); + TEST_EQ (job->goal, JOB_STOP); TEST_EQ (job->state, JOB_STOPPING); @@ -2177,6 +2220,13 @@ TEST_LIST_EMPTY (&job->blocking); + TEST_EQ_P (job->env, NULL); + TEST_EQ_P (job->start_env, NULL); + + TEST_NE_P (job->stop_env, NULL); + TEST_EQ_P (job->stop_env[0], NULL); + + TEST_NE_P (job->stop_env, env); dbus_connection_flush (conn); @@ -2354,10 +2404,16 @@ TEST_EQ (job->goal, JOB_STOP); TEST_EQ (job->state, JOB_STOPPING); + TEST_EQ_P (job->env, NULL); + TEST_EQ_P (job->start_env, NULL); + + TEST_NE_P (job->stop_env, NULL); TEST_EQ_STR (job->stop_env[0], "FOO=wibble"); TEST_EQ_STR (job->stop_env[1], "BAR=wobble"); TEST_EQ_P (job->stop_env[2], NULL); + TEST_NE_P (job->stop_env, env); + TEST_LIST_NOT_EMPTY (&job->blocking); blocked = (Blocked *)job->blocking.next; @@ -2527,6 +2583,16 @@ TEST_EQ (job->goal, JOB_START); TEST_EQ (job->state, JOB_STOPPING); + TEST_EQ_P (job->env, NULL); + TEST_EQ_P (job->stop_env, NULL); + + TEST_NE_P (job->start_env, NULL); + TEST_EQ_STRN (job->start_env[0], "PATH="); + TEST_EQ_STRN (job->start_env[1], "TERM="); + TEST_EQ_P (job->start_env[2], NULL); + + TEST_NE_P (job->start_env, env); + TEST_LIST_NOT_EMPTY (&job->blocking); blocked = (Blocked *)job->blocking.next; @@ -2626,6 +2692,16 @@ TEST_EQ (job->goal, JOB_START); TEST_EQ (job->state, JOB_STOPPING); + TEST_EQ_P (job->env, NULL); + TEST_EQ_P (job->stop_env, NULL); + + TEST_NE_P (job->start_env, NULL); + TEST_EQ_STRN (job->start_env[0], "PATH="); + TEST_EQ_STRN (job->start_env[1], "TERM="); + TEST_EQ_P (job->start_env[2], NULL); + + TEST_NE_P (job->start_env, env); + TEST_LIST_EMPTY (&job->blocking);
-- upstart-devel mailing list [email protected] Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/upstart-devel
