Changeset 23050
- Timestamp:
- 02/08/07 17:51:31 (22 months ago)
- Files:
-
- 1 modified
-
trunk/launchd/src/launchd_core_logic.c (modified) (29 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/launchd/src/launchd_core_logic.c
r23049 r23050 192 192 SLIST_ENTRY(jobmgr_s) sle; 193 193 SLIST_HEAD(, jobmgr_s) submgrs; 194 SLIST_HEAD(, job_s) jobs;194 TAILQ_HEAD(, job_s) jobs; 195 195 mach_port_t jm_port; 196 196 mach_port_t req_port; … … 228 228 struct job_s { 229 229 kq_callback kqjob_callback; 230 SLIST_ENTRY(job_s) sle;230 TAILQ_ENTRY(job_s) sle; 231 231 SLIST_HEAD(, socketgroup) sockets; 232 232 SLIST_HEAD(, calendarinterval) cal_intervals; … … 524 524 } 525 525 526 SLIST_FOREACH_SAFE(ji, &jm->jobs, sle, jn) {526 TAILQ_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { 527 527 if (!job_active(ji)) { 528 528 job_remove(ji); … … 552 552 553 553 /* We should have one job left and it should be the anonymous job */ 554 ji = SLIST_FIRST(&jm->jobs);555 jobmgr_assumes(jm, ji && ji == jm->anonj && ( SLIST_NEXT(ji, sle) == NULL));556 557 while ((ji = SLIST_FIRST(&jm->jobs))) {554 ji = TAILQ_FIRST(&jm->jobs); 555 jobmgr_assumes(jm, ji && ji == jm->anonj && (TAILQ_NEXT(ji, sle) == NULL)); 556 557 while ((ji = TAILQ_FIRST(&jm->jobs))) { 558 558 job_remove(ji); 559 559 } … … 683 683 684 684 if (job_assumes(j, j->mgr)) { 685 SLIST_REMOVE(&j->mgr->jobs, j, job_s, sle);685 TAILQ_REMOVE(&j->mgr->jobs, j, sle); 686 686 jobmgr_tickle(j->mgr); 687 687 } … … 973 973 } 974 974 975 SLIST_INSERT_HEAD(&jm->jobs, j, sle);975 TAILQ_INSERT_TAIL(&jm->jobs, j, sle); 976 976 977 977 job_log(j, LOG_DEBUG, "Conceived"); … … 1494 1494 } 1495 1495 1496 SLIST_FOREACH(ji, &jm->jobs, sle) {1496 TAILQ_FOREACH(ji, &jm->jobs, sle) { 1497 1497 if (strcmp(ji->label, label) == 0) { 1498 1498 return ji; … … 1515 1515 runtime_get_caller_creds(&ldc); 1516 1516 1517 SLIST_FOREACH(ji, &jm->jobs, sle) {1517 TAILQ_FOREACH(ji, &jm->jobs, sle) { 1518 1518 if (ji->p == ldc.pid) { 1519 1519 /* This is just a MRU perfomance hack */ 1520 SLIST_REMOVE(&jm->jobs, ji, job_s, sle);1521 SLIST_INSERT_HEAD(&jm->jobs, ji, sle);1520 TAILQ_REMOVE(&jm->jobs, ji, sle); 1521 TAILQ_INSERT_HEAD(&jm->jobs, ji, sle); 1522 1522 return ji; 1523 } else if (ji->p == 0) { 1524 /* All the PIDs are at the front of the list */ 1525 break; 1523 1526 } 1524 1527 } 1525 1526 1528 return jm->anonj; 1527 1529 } … … 1535 1537 } 1536 1538 1537 SLIST_FOREACH(ji, &jm->jobs, sle) {1539 TAILQ_FOREACH(ji, &jm->jobs, sle) { 1538 1540 if (ji->j_port == p) { 1539 1541 return ji; … … 1567 1569 } 1568 1570 1569 SLIST_FOREACH(ji, &jm->jobs, sle) {1571 TAILQ_FOREACH(ji, &jm->jobs, sle) { 1570 1572 SLIST_FOREACH(ms, &ji->machservices, sle) { 1571 1573 if (ms->port == p) { … … 1593 1595 } 1594 1596 1595 SLIST_FOREACH(ji, &jm->jobs, sle) {1597 TAILQ_FOREACH(ji, &jm->jobs, sle) { 1596 1598 launch_data_t tmp; 1597 1599 … … 1636 1638 return; 1637 1639 } 1640 1641 /* Performance hack */ 1642 TAILQ_REMOVE(&j->mgr->jobs, j, sle); 1643 TAILQ_INSERT_TAIL(&j->mgr->jobs, j, sle); 1638 1644 1639 1645 job_assumes(j, gettimeofday(&tve, NULL) != -1); … … 1699 1705 } 1700 1706 1701 SLIST_FOREACH_SAFE(ji, &jm->jobs, sle, jn) {1707 TAILQ_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { 1702 1708 job_dispatch(ji, false); 1703 1709 } … … 1890 1896 break; 1891 1897 default: 1898 /* Performance hack */ 1899 TAILQ_REMOVE(&j->mgr->jobs, j, sle); 1900 TAILQ_INSERT_HEAD(&j->mgr->jobs, j, sle); 1901 1892 1902 if (!j->legacy_mach_job) { 1893 1903 job_assumes(j, close(oepair[1]) != -1); … … 1994 2004 } 1995 2005 1996 SLIST_FOREACH(ji, &jm->jobs, sle) {2006 TAILQ_FOREACH(ji, &jm->jobs, sle) { 1997 2007 SLIST_FOREACH(ei, &ji->global_env, sle) { 1998 2008 setenv(ei->key, ei->value, 1); … … 2816 2826 job_t ji; 2817 2827 2818 SLIST_FOREACH(ji, &j->mgr->jobs, sle) {2828 TAILQ_FOREACH(ji, &j->mgr->jobs, sle) { 2819 2829 if (ji->p) { 2820 2830 cnt++; … … 3187 3197 } 3188 3198 3189 SLIST_FOREACH(ji, &jm->jobs, sle) {3199 TAILQ_FOREACH(ji, &jm->jobs, sle) { 3190 3200 if (ji->p && !ji->hopefully_exits_last) { 3191 3201 return jm; … … 3193 3203 } 3194 3204 3195 SLIST_FOREACH(ji, &jm->jobs, sle) {3205 TAILQ_FOREACH(ji, &jm->jobs, sle) { 3196 3206 job_stop(ji); 3197 3207 } … … 3216 3226 } 3217 3227 3218 SLIST_FOREACH(ji, &jm->jobs, sle) {3228 TAILQ_FOREACH(ji, &jm->jobs, sle) { 3219 3229 if (ji->p) { 3220 3230 return false; … … 3306 3316 return NULL; 3307 3317 } 3318 3319 TAILQ_INIT(&jmr->jobs); 3308 3320 3309 3321 jmr->req_port = requestorport; … … 3379 3391 } 3380 3392 3381 SLIST_FOREACH_SAFE(ji, &jm->jobs, sle, jn) {3393 TAILQ_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { 3382 3394 SLIST_FOREACH_SAFE(ms, &ji->machservices, sle, next_ms) { 3383 3395 if (ms->port == port) { … … 3394 3406 job_t ji; 3395 3407 3396 SLIST_FOREACH(ji, &jm->jobs, sle) {3408 TAILQ_FOREACH(ji, &jm->jobs, sle) { 3397 3409 SLIST_FOREACH(ms, &ji->machservices, sle) { 3398 3410 if (strcmp(name, ms->name) == 0) { … … 3552 3564 3553 3565 /* We don't need the _SAFE version because we return after the job_dispatch() */ 3554 SLIST_FOREACH(ji, &jm->jobs, sle) {3566 TAILQ_FOREACH(ji, &jm->jobs, sle) { 3555 3567 SLIST_FOREACH(ms, &ji->machservices, sle) { 3556 3568 if (ms->port != p) { … … 3705 3717 } 3706 3718 3707 SLIST_FOREACH_SAFE(ji, &jm->jobs, sle, jn) {3719 TAILQ_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { 3708 3720 if (!SLIST_EMPTY(&ji->semaphores)) { 3709 3721 job_dispatch(ji, false); … … 4028 4040 *up_cont = MACH_PORT_NULL; 4029 4041 4030 SLIST_FOREACH(ji, &root_jobmgr->jobs, sle) {4042 TAILQ_FOREACH(ji, &root_jobmgr->jobs, sle) { 4031 4043 if (ji->mach_uid != which_user) { 4032 4044 continue; … … 4249 4261 jm = j->mgr; 4250 4262 4251 SLIST_FOREACH(ji, &jm->jobs, sle) {4263 TAILQ_FOREACH(ji, &jm->jobs, sle) { 4252 4264 SLIST_FOREACH(ms, &ji->machservices, sle) { 4253 4265 cnt++; … … 4269 4281 } 4270 4282 4271 SLIST_FOREACH(ji, &jm->jobs, sle) {4283 TAILQ_FOREACH(ji, &jm->jobs, sle) { 4272 4284 SLIST_FOREACH(ms, &ji->machservices, sle) { 4273 4285 strlcpy(service_names[cnt2], machservice_name(ms), sizeof(service_names[0])); … … 4313 4325 4314 4326 if (job_assumes(j, jmi != NULL)) { 4315 SLIST_REMOVE(&j->mgr->jobs, j, job_s, sle);4316 SLIST_INSERT_HEAD(&jmi->jobs, j, sle);4327 TAILQ_REMOVE(&j->mgr->jobs, j, sle); 4328 TAILQ_INSERT_TAIL(&jmi->jobs, j, sle); 4317 4329 j->mgr = jmi; 4318 4330 } … … 4652 4664 launchd_assert((root_jobmgr = jobmgr_new(NULL, mach_task_self(), checkin_port)) != NULL); 4653 4665 4654 SLIST_FOREACH(ji, &root_jobmgr->jobs, sle) {4666 TAILQ_FOREACH(ji, &root_jobmgr->jobs, sle) { 4655 4667 if (ji->anonymous) { 4656 4668 anon_job = ji;

