Projects
Browse Source     Search     Timeline     Wiki

Changeset 23050

Show
Ignore:
Timestamp:
02/08/07 17:51:31 (22 months ago)
Author:
zarzycki@…
Message:

Performance hack. We really ought to switch to hashes at some point.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/launchd/src/launchd_core_logic.c

    r23049 r23050  
    192192        SLIST_ENTRY(jobmgr_s) sle; 
    193193        SLIST_HEAD(, jobmgr_s) submgrs; 
    194         SLIST_HEAD(, job_s) jobs; 
     194        TAILQ_HEAD(, job_s) jobs; 
    195195        mach_port_t jm_port; 
    196196        mach_port_t req_port; 
     
    228228struct job_s { 
    229229        kq_callback kqjob_callback; 
    230         SLIST_ENTRY(job_s) sle; 
     230        TAILQ_ENTRY(job_s) sle; 
    231231        SLIST_HEAD(, socketgroup) sockets; 
    232232        SLIST_HEAD(, calendarinterval) cal_intervals; 
     
    524524        } 
    525525 
    526         SLIST_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { 
     526        TAILQ_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { 
    527527                if (!job_active(ji)) { 
    528528                        job_remove(ji); 
     
    552552 
    553553        /* 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))) { 
    558558                job_remove(ji); 
    559559        } 
     
    683683 
    684684        if (job_assumes(j, j->mgr)) { 
    685                 SLIST_REMOVE(&j->mgr->jobs, j, job_s, sle); 
     685                TAILQ_REMOVE(&j->mgr->jobs, j, sle); 
    686686                jobmgr_tickle(j->mgr); 
    687687        } 
     
    973973        } 
    974974 
    975         SLIST_INSERT_HEAD(&jm->jobs, j, sle); 
     975        TAILQ_INSERT_TAIL(&jm->jobs, j, sle); 
    976976 
    977977        job_log(j, LOG_DEBUG, "Conceived"); 
     
    14941494        } 
    14951495 
    1496         SLIST_FOREACH(ji, &jm->jobs, sle) { 
     1496        TAILQ_FOREACH(ji, &jm->jobs, sle) { 
    14971497                if (strcmp(ji->label, label) == 0) { 
    14981498                        return ji; 
     
    15151515                runtime_get_caller_creds(&ldc); 
    15161516 
    1517                 SLIST_FOREACH(ji, &jm->jobs, sle) { 
     1517                TAILQ_FOREACH(ji, &jm->jobs, sle) { 
    15181518                        if (ji->p == ldc.pid) { 
    15191519                                /* 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); 
    15221522                                return ji; 
     1523                        } else if (ji->p == 0) { 
     1524                                /* All the PIDs are at the front of the list */ 
     1525                                break; 
    15231526                        } 
    15241527                } 
    1525  
    15261528                return jm->anonj; 
    15271529        } 
     
    15351537        } 
    15361538 
    1537         SLIST_FOREACH(ji, &jm->jobs, sle) { 
     1539        TAILQ_FOREACH(ji, &jm->jobs, sle) { 
    15381540                if (ji->j_port == p) { 
    15391541                        return ji; 
     
    15671569        } 
    15681570 
    1569         SLIST_FOREACH(ji, &jm->jobs, sle) { 
     1571        TAILQ_FOREACH(ji, &jm->jobs, sle) { 
    15701572                SLIST_FOREACH(ms, &ji->machservices, sle) { 
    15711573                        if (ms->port == p) { 
     
    15931595        } 
    15941596 
    1595         SLIST_FOREACH(ji, &jm->jobs, sle) { 
     1597        TAILQ_FOREACH(ji, &jm->jobs, sle) { 
    15961598                launch_data_t tmp; 
    15971599 
     
    16361638                return; 
    16371639        } 
     1640 
     1641        /* Performance hack */ 
     1642        TAILQ_REMOVE(&j->mgr->jobs, j, sle); 
     1643        TAILQ_INSERT_TAIL(&j->mgr->jobs, j, sle); 
    16381644 
    16391645        job_assumes(j, gettimeofday(&tve, NULL) != -1); 
     
    16991705        } 
    17001706 
    1701         SLIST_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { 
     1707        TAILQ_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { 
    17021708                job_dispatch(ji, false); 
    17031709        } 
     
    18901896                break; 
    18911897        default: 
     1898                /* Performance hack */ 
     1899                TAILQ_REMOVE(&j->mgr->jobs, j, sle); 
     1900                TAILQ_INSERT_HEAD(&j->mgr->jobs, j, sle); 
     1901 
    18921902                if (!j->legacy_mach_job) { 
    18931903                        job_assumes(j, close(oepair[1]) != -1); 
     
    19942004        } 
    19952005 
    1996         SLIST_FOREACH(ji, &jm->jobs, sle) { 
     2006        TAILQ_FOREACH(ji, &jm->jobs, sle) { 
    19972007                SLIST_FOREACH(ei, &ji->global_env, sle) { 
    19982008                        setenv(ei->key, ei->value, 1); 
     
    28162826                job_t ji; 
    28172827 
    2818                 SLIST_FOREACH(ji, &j->mgr->jobs, sle) { 
     2828                TAILQ_FOREACH(ji, &j->mgr->jobs, sle) { 
    28192829                        if (ji->p) { 
    28202830                                cnt++; 
     
    31873197        } 
    31883198 
    3189         SLIST_FOREACH(ji, &jm->jobs, sle) { 
     3199        TAILQ_FOREACH(ji, &jm->jobs, sle) { 
    31903200                if (ji->p && !ji->hopefully_exits_last) { 
    31913201                        return jm; 
     
    31933203        } 
    31943204 
    3195         SLIST_FOREACH(ji, &jm->jobs, sle) { 
     3205        TAILQ_FOREACH(ji, &jm->jobs, sle) { 
    31963206                job_stop(ji); 
    31973207        } 
     
    32163226        } 
    32173227 
    3218         SLIST_FOREACH(ji, &jm->jobs, sle) { 
     3228        TAILQ_FOREACH(ji, &jm->jobs, sle) { 
    32193229                if (ji->p) { 
    32203230                        return false; 
     
    33063316                return NULL; 
    33073317        } 
     3318 
     3319        TAILQ_INIT(&jmr->jobs); 
    33083320 
    33093321        jmr->req_port = requestorport; 
     
    33793391        } 
    33803392 
    3381         SLIST_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { 
     3393        TAILQ_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { 
    33823394                SLIST_FOREACH_SAFE(ms, &ji->machservices, sle, next_ms) { 
    33833395                        if (ms->port == port) { 
     
    33943406        job_t ji; 
    33953407 
    3396         SLIST_FOREACH(ji, &jm->jobs, sle) { 
     3408        TAILQ_FOREACH(ji, &jm->jobs, sle) { 
    33973409                SLIST_FOREACH(ms, &ji->machservices, sle) { 
    33983410                        if (strcmp(name, ms->name) == 0) { 
     
    35523564 
    35533565        /* 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) { 
    35553567                SLIST_FOREACH(ms, &ji->machservices, sle) { 
    35563568                        if (ms->port != p) { 
     
    37053717        } 
    37063718 
    3707         SLIST_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { 
     3719        TAILQ_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { 
    37083720                if (!SLIST_EMPTY(&ji->semaphores)) { 
    37093721                        job_dispatch(ji, false); 
     
    40284040        *up_cont = MACH_PORT_NULL; 
    40294041 
    4030         SLIST_FOREACH(ji, &root_jobmgr->jobs, sle) { 
     4042        TAILQ_FOREACH(ji, &root_jobmgr->jobs, sle) { 
    40314043                if (ji->mach_uid != which_user) { 
    40324044                        continue; 
     
    42494261        jm = j->mgr; 
    42504262 
    4251         SLIST_FOREACH(ji, &jm->jobs, sle) { 
     4263        TAILQ_FOREACH(ji, &jm->jobs, sle) { 
    42524264                SLIST_FOREACH(ms, &ji->machservices, sle) { 
    42534265                        cnt++; 
     
    42694281        } 
    42704282 
    4271         SLIST_FOREACH(ji, &jm->jobs, sle) { 
     4283        TAILQ_FOREACH(ji, &jm->jobs, sle) { 
    42724284                SLIST_FOREACH(ms, &ji->machservices, sle) { 
    42734285                        strlcpy(service_names[cnt2], machservice_name(ms), sizeof(service_names[0])); 
     
    43134325 
    43144326        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); 
    43174329                j->mgr = jmi; 
    43184330        } 
     
    46524664        launchd_assert((root_jobmgr = jobmgr_new(NULL, mach_task_self(), checkin_port)) != NULL); 
    46534665 
    4654         SLIST_FOREACH(ji, &root_jobmgr->jobs, sle) { 
     4666        TAILQ_FOREACH(ji, &root_jobmgr->jobs, sle) { 
    46554667                if (ji->anonymous) { 
    46564668                        anon_job = ji;