Changeset 23037
- Timestamp:
- 02/07/07 10:26:57 (22 months ago)
- Location:
- trunk/launchd/src
- Files:
-
- 2 modified
-
launchd_core_logic.c (modified) (7 diffs)
-
launchd_core_logic.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/launchd/src/launchd_core_logic.c
r23035 r23037 977 977 } 978 978 979 job_dispatch(j, false); 980 981 return j; 979 return job_dispatch(j, false); 982 980 } 983 981 … … 1642 1640 jobmgr_dispatch_all(jobmgr_t jm) 1643 1641 { 1644 jobmgr_t jmi ;1645 job_t ji ;1646 1647 SLIST_FOREACH (jmi, &jm->submgrs, sle) {1642 jobmgr_t jmi, jmn; 1643 job_t ji, jn; 1644 1645 SLIST_FOREACH_SAFE(jmi, &jm->submgrs, sle, jmn) { 1648 1646 jobmgr_dispatch_all(jmi); 1649 1647 } 1650 1648 1651 SLIST_FOREACH (ji, &jm->jobs, sle) {1649 SLIST_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { 1652 1650 job_dispatch(ji, false); 1653 1651 } 1654 1652 } 1655 1653 1656 void 1654 job_t 1657 1655 job_dispatch(job_t j, bool kickstart) 1658 1656 { … … 1665 1663 * This is a classic example. The act of dispatching a job may delete it. 1666 1664 */ 1667 if (job_active(j)) { 1668 return; 1669 } else if (job_useless(j)) { 1670 job_remove(j); 1671 } else if (kickstart || job_keepalive(j)) { 1672 job_start(j); 1673 } else { 1674 job_watch(j); 1675 } 1665 if (!job_active(j)) { 1666 if (job_useless(j)) { 1667 job_remove(j); 1668 return NULL; 1669 } else if (kickstart || job_keepalive(j)) { 1670 job_start(j); 1671 } else { 1672 job_watch(j); 1673 } 1674 } 1675 1676 return j; 1676 1677 } 1677 1678 … … 3469 3470 } 3470 3471 3472 /* We don't need the _SAFE version because we return after the job_dispatch() */ 3471 3473 SLIST_FOREACH(ji, &jm->jobs, sle) { 3472 3474 SLIST_FOREACH(ms, &ji->machservices, sle) { … … 3614 3616 jobmgr_dispatch_all_semaphores(jobmgr_t jm) 3615 3617 { 3616 jobmgr_t jmi ;3618 jobmgr_t jmi, jmn; 3617 3619 job_t ji, jn; 3618 3620 3619 3621 3620 SLIST_FOREACH (jmi, &jm->submgrs, sle) {3622 SLIST_FOREACH_SAFE(jmi, &jm->submgrs, sle, jmn) { 3621 3623 jobmgr_dispatch_all_semaphores(jmi); 3622 3624 } … … 3980 3982 ms->hide = true; 3981 3983 3982 job_dispatch(ji, false); 3983 } 3984 3985 *up_cont = machservice_port(SLIST_FIRST(&ji->machservices)); 3984 ji = job_dispatch(ji, false); 3985 } 3986 3987 if (job_assumes(j, ji != NULL)) { 3988 *up_cont = machservice_port(SLIST_FIRST(&ji->machservices)); 3989 } 3986 3990 3987 3991 return 0; … … 4539 4543 jr->j_binpref_cnt = binpref_cnt; 4540 4544 4541 job_dispatch(jr, true); 4545 jr = job_dispatch(jr, true); 4546 4547 if (!job_assumes(j, jr != NULL)) { 4548 return BOOTSTRAP_NO_MEMORY; 4549 } 4542 4550 4543 4551 if (!job_setup_machport(jr)) { -
trunk/launchd/src/launchd_core_logic.h
r23009 r23037 44 44 45 45 job_t job_new(jobmgr_t jm, const char *label, const char *prog, const char *const *argv, const char *stdinpath); 46 void job_dispatch(job_t j, bool kickstart); 46 job_t job_dispatch(job_t j, bool kickstart); /* returns j on success, NULL on job removal */ 47 47 bool job_active(job_t j); 48 48 launch_data_t job_export(job_t j);

