From source_changes at macosforge.org Wed Oct 7 13:08:50 2009 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 7 Oct 2009 13:08:50 -0700 (PDT) Subject: [launchd-changes] [23936] branches/PR-7178164/launchd/src/launchd_core_logic.c Message-ID: <20091007200851.14FBF293F8FF@beta.macosforge.org> Revision: 23936 http://trac.macosforge.org/projects/launchd/changeset/23936 Author: dsorresso at apple.com Date: 2009-10-07 13:08:49 -0700 (Wed, 07 Oct 2009) Log Message: ----------- Checkpoint. Modified Paths: -------------- branches/PR-7178164/launchd/src/launchd_core_logic.c Modified: branches/PR-7178164/launchd/src/launchd_core_logic.c =================================================================== --- branches/PR-7178164/launchd/src/launchd_core_logic.c 2009-09-26 21:45:45 UTC (rev 23935) +++ branches/PR-7178164/launchd/src/launchd_core_logic.c 2009-10-07 20:08:49 UTC (rev 23936) @@ -93,7 +93,10 @@ typedef struct jetsam_priority_entry { pid_t pid; uint32_t flags; - uint32_t memlimit; + int32_t hiwat_pages; + int32_t hiwat_reserved1; + int32_t hiwat_reserved2; + int32_t hiwat_reserved3; } jetsam_priority_entry_t; enum { @@ -9001,7 +9004,7 @@ launch_data_t memlimit = 0; if( !(memlimit = launch_data_dict_lookup(ldi, LAUNCH_JOBKEY_JETSAMMEMORYLIMIT)) || launch_data_get_type(frontmost) != LAUNCH_DATA_INTEGER ) { - ji->jetsam_memlimit = 0; + ji->jetsam_memlimit = -1; continue; } ji->jetsam_memlimit = (uint32_t)launch_data_get_integer(memlimit); @@ -9028,7 +9031,7 @@ for( i = 0; i < totalpris; i++ ) { jpris[i].pid = jobs[i]->p; jpris[i].flags |= jobs[i]->jetsam_frontmost ? kJetsamFlagsFrontmost : 0; - jpris[i].memlimit = jobs[i]->jetsam_memlimit; + jpris[i].hiwat_pages = jobs[i]->jetsam_memlimit; } int _result = 0; -------------- next part -------------- An HTML attachment was scrubbed... URL: From source_changes at macosforge.org Wed Oct 7 17:53:10 2009 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 7 Oct 2009 17:53:10 -0700 (PDT) Subject: [launchd-changes] [23937] branches/PR-7178164/launchd/src Message-ID: <20091008005310.B98D02944411@beta.macosforge.org> Revision: 23937 http://trac.macosforge.org/projects/launchd/changeset/23937 Author: dsorresso at apple.com Date: 2009-10-07 17:53:09 -0700 (Wed, 07 Oct 2009) Log Message: ----------- Final-looking Jetsam changes. Modified Paths: -------------- branches/PR-7178164/launchd/src/launch_priv.h branches/PR-7178164/launchd/src/launchd_core_logic.c Modified: branches/PR-7178164/launchd/src/launch_priv.h =================================================================== --- branches/PR-7178164/launchd/src/launch_priv.h 2009-10-07 20:08:49 UTC (rev 23936) +++ branches/PR-7178164/launchd/src/launch_priv.h 2009-10-08 00:53:09 UTC (rev 23937) @@ -49,19 +49,21 @@ #define LAUNCH_KEY_BATCHQUERY "BatchQuery" #define LAUNCHD_DO_APPLE_INTERNAL_LOGGING "__DoAppleInternalLogging__" -#define LAUNCH_KEY_JETSAMLABEL "JetsamLabel" -#define LAUNCH_KEY_JETSAMFRONTMOST "JetsamFrontmost" -#define LAUNCH_KEY_JETSAMPRIORITY "JetsamPriority" - #define LAUNCH_JOBKEY_TRANSACTIONCOUNT "TransactionCount" #define LAUNCH_JOBKEY_QUARANTINEDATA "QuarantineData" #define LAUNCH_JOBKEY_SANDBOXPROFILE "SandboxProfile" #define LAUNCH_JOBKEY_SANDBOXFLAGS "SandboxFlags" #define LAUNCH_JOBKEY_SANDBOX_NAMED "Named" +#define LAUNCH_JOBKEY_JETSAMPROPERTIES "JetsamProperties" #define LAUNCH_JOBKEY_JETSAMPRIORITY "JetsamPriority" #define LAUNCH_JOBKEY_JETSAMMEMORYLIMIT "JetsamMemoryLimit" #define LAUNCH_JOBKEY_SECURITYSESSIONUUID "SecuritySessionUUID" +#define LAUNCH_KEY_JETSAMLABEL "JetsamLabel" +#define LAUNCH_KEY_JETSAMFRONTMOST "JetsamFrontmost" +#define LAUNCH_KEY_JETSAMPRIORITY LAUNCH_JOBKEY_JETSAMPRIORITY +#define LAUNCH_KEY_JETSAMMEMORYLIMIT LAUNCH_JOBKEY_JETSAMMEMORYLIMIT + #define LAUNCH_JOBKEY_EMBEDDEDPRIVILEGEDISPENSATION "EmbeddedPrivilegeDispensation" #define LAUNCH_JOBKEY_EMBEDDEDMAINTHREADPRIORITY "EmbeddedMainThreadPriority" Modified: branches/PR-7178164/launchd/src/launchd_core_logic.c =================================================================== --- branches/PR-7178164/launchd/src/launchd_core_logic.c 2009-10-07 20:08:49 UTC (rev 23936) +++ branches/PR-7178164/launchd/src/launchd_core_logic.c 2009-10-08 00:53:09 UTC (rev 23937) @@ -91,8 +91,8 @@ #else /* To make my life easier. */ typedef struct jetsam_priority_entry { - pid_t pid; - uint32_t flags; + pid_t pid; + uint32_t flags; int32_t hiwat_pages; int32_t hiwat_reserved1; int32_t hiwat_reserved2; @@ -137,7 +137,6 @@ #define LAUNCHD_DEFAULT_EXIT_TIMEOUT 20 #define LAUNCHD_SIGKILL_TIMER 5 #define LAUNCHD_CLEAN_KILL_TIMER 1 -#define LAUNCHD_JETSAM_PRIORITY_UNSET 0xdead1ee #define SHUTDOWN_LOG_DIR "/var/log/shutdown" @@ -280,6 +279,8 @@ static void seatbelt_setup_flags(launch_data_t obj, const char *key, void *context); #endif +static void jetsam_property_setup(launch_data_t obj, const char *key, job_t j); + typedef enum { NETWORK_UP = 1, NETWORK_DOWN, @@ -546,7 +547,8 @@ clean_exit_timer_expired :1, /* The job was clean, received SIGKILL and failed to exit after LAUNCHD_CLEAN_KILL_TIMER seconds. */ embedded_special_privileges :1, /* The job runs as a non-root user on embedded but has select privileges of the root user. */ did_exec :1, /* The job exec(2)ed successfully. */ - migratory :1; /* The (anonymous) job called vprocmgr_switch_to_session(). */ + migratory :1, /* The (anonymous) job called vprocmgr_switch_to_session(). */ + jetsam_properties :1; /* The job has Jetsam limits in place. */ mode_t mask; pid_t tracing_pid; mach_port_t audit_session; @@ -642,10 +644,6 @@ void eliminate_double_reboot(void); -/* For Jetsam. */ -static int job_cmp(const job_t *lhs, const job_t *rhs); -int launchd_set_jetsam_priorities(launch_data_t priorities); - /* file local globals */ static size_t total_children; static size_t total_anon_children; @@ -1203,7 +1201,7 @@ /* Not a big deal if this fails. It means that the timer's already been freed. */ kevent_mod((uintptr_t)&j->exit_timeout, EVFILT_TIMER, EV_DELETE, 0, 0, NULL); } - if( j->jetsam_priority != LAUNCHD_JETSAM_PRIORITY_UNSET ) { + if( j->jetsam_properties ) { LIST_REMOVE(j, jetsam_sle); j->mgr->jetsam_jobs_cnt--; } @@ -1535,7 +1533,8 @@ j->currently_ignored = true; j->ondemand = true; j->checkedin = true; - j->jetsam_priority = LAUNCHD_JETSAM_PRIORITY_UNSET; + j->jetsam_priority = -1; + j->jetsam_memlimit = -1; uuid_clear(j->expected_audit_uuid); if (prog) { @@ -1898,21 +1897,6 @@ j->main_thread_priority = value; } break; - case 'j': - case 'J': - if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMPRIORITY) == 0 ) { - job_log(j, LOG_DEBUG, "Importing job with priority: %lld", value); - j->jetsam_priority = (typeof(j->jetsam_priority))value; - LIST_INSERT_HEAD(&j->mgr->jetsam_jobs, j, jetsam_sle); - j->mgr->jetsam_jobs_cnt++; - } else if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMMEMORYLIMIT) == 0 ) { - /* The Jetsam stuff really needs to be in its own dictionary. For now, - * we'll require that anyone who wants to do anything with Jetsam must - * set a priority, even if they only want the memory limit stuff. - */ - j->jetsam_memlimit = (typeof(j->jetsam_memlimit))value; - } - break; case 'n': case 'N': if (strcasecmp(key, LAUNCH_JOBKEY_NICE) == 0) { @@ -2061,6 +2045,16 @@ } } break; + case 'j': + case 'J': + if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMPROPERTIES) == 0 ) { + if( job_assumes(j, !j->jetsam_properties) ) { + LIST_INSERT_HEAD(&j->mgr->jetsam_jobs, j, jetsam_sle); + j->mgr->jetsam_jobs_cnt++; + j->jetsam_properties = true; + } + launch_data_dict_iterate(value, (void (*)(launch_data_t, const char *, void *))jetsam_property_setup, j); + } case 'e': case 'E': if (strcasecmp(key, LAUNCH_JOBKEY_ENVIRONMENTVARIABLES) == 0) { @@ -4191,7 +4185,7 @@ } #if !TARGET_OS_EMBEDDED - if( j->jetsam_priority != LAUNCHD_JETSAM_PRIORITY_UNSET ) { + if( j->jetsam_properties ) { job_assumes(j, proc_setpcontrol(PROC_SETPC_TERMINATE) == 0); } #endif @@ -8923,19 +8917,25 @@ } } -static int -job_cmp(const job_t *lhs, const job_t *rhs) +void +jetsam_property_setup(launch_data_t obj, const char *key, job_t j) { - job_t _lhs = *lhs; - job_t _rhs = *rhs; - /* Sort in descending order. (Priority correlates to the soonishness with which you will be killed.) */ - if( _lhs->jetsam_priority > _rhs->jetsam_priority ) { - return -1; - } else if( _lhs->jetsam_priority < _rhs->jetsam_priority ) { - return 1; + job_log(j, LOG_NOTICE, "Importing Jetsam job..."); + if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMPRIORITY) == 0 && launch_data_get_type(obj) == LAUNCH_DATA_INTEGER ) { + j->jetsam_priority = (typeof(j->jetsam_priority))launch_data_get_integer(obj); + job_log(j, LOG_NOTICE, "Priority: %d", j->jetsam_priority); + } else if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMMEMORYLIMIT) == 0 && launch_data_get_type(obj) == LAUNCH_DATA_INTEGER ) { + j->jetsam_memlimit = (typeof(j->jetsam_memlimit))launch_data_get_integer(obj); + job_log(j, LOG_NOTICE, "Memory limit: %d", j->jetsam_memlimit); + } else if( strcasecmp(key, LAUNCH_KEY_JETSAMFRONTMOST) == 0 ) { + /* Ignore. We only recognize this key so we don't complain. You can't set this in a plist. */ + } else if( strcasecmp(key, LAUNCH_KEY_JETSAMLABEL) == 0 ) { + /* Ignore. This key is present in SpringBoard's request dictionary, so we don't want to + * complain about it. + */ + } else { + job_log(j, LOG_ERR, "Unknown Jetsam key: %s", key); } - - return 0; } int @@ -8981,55 +8981,60 @@ if( !launchd_assumes(ji != NULL) ) { continue; } - - launch_data_t pri; - typeof(ji->jetsam_priority) _pri = 0; - if( !launchd_assumes(pri = launch_data_dict_lookup(ldi, LAUNCH_KEY_JETSAMPRIORITY)) || launch_data_get_type(pri) != LAUNCH_DATA_INTEGER ) { - continue; - } - _pri = (typeof(_pri))launch_data_get_integer(pri); - - if( ji->jetsam_priority == LAUNCHD_JETSAM_PRIORITY_UNSET ) { - LIST_INSERT_HEAD(&ji->mgr->jetsam_jobs, ji, jetsam_sle); - ji->mgr->jetsam_jobs_cnt++; - } - ji->jetsam_priority = _pri; - + + launch_data_dict_iterate(ldi, (void (*)(launch_data_t, const char *, void *))jetsam_property_setup, ji); + launch_data_t frontmost = NULL; - if( !(frontmost = launch_data_dict_lookup(ldi, LAUNCH_KEY_JETSAMFRONTMOST)) || launch_data_get_type(frontmost) != LAUNCH_DATA_BOOL ) { - ji->jetsam_frontmost = false; - continue; + if( (frontmost = launch_data_dict_lookup(ldi, LAUNCH_KEY_JETSAMFRONTMOST)) && launch_data_get_type(frontmost) == LAUNCH_DATA_BOOL ) { + ji->jetsam_frontmost = launch_data_get_bool(frontmost); } - ji->jetsam_frontmost = launch_data_get_bool(frontmost); - launch_data_t memlimit = 0; - if( !(memlimit = launch_data_dict_lookup(ldi, LAUNCH_JOBKEY_JETSAMMEMORYLIMIT)) || launch_data_get_type(frontmost) != LAUNCH_DATA_INTEGER ) { - ji->jetsam_memlimit = -1; - continue; + /* If the job wasn't in the Jetsam list before, add it. */ + if( job_assumes(ji, ji->jetsam_priority || ji->jetsam_frontmost || ji->jetsam_memlimit) ) { + if( !ji->jetsam_properties ) { + LIST_INSERT_HEAD(&ji->mgr->jetsam_jobs, ji, jetsam_sle); + ji->mgr->jetsam_jobs_cnt++; + } } - ji->jetsam_memlimit = (uint32_t)launch_data_get_integer(memlimit); } i = 0; job_t *jobs = (job_t *)calloc(jm->jetsam_jobs_cnt, sizeof(job_t)); - LIST_FOREACH( ji, &jm->jetsam_jobs, jetsam_sle ) { - if( ji->p ) { - jobs[i] = ji; - i++; + if( launchd_assumes(jobs != NULL) ) { + LIST_FOREACH( ji, &jm->jetsam_jobs, jetsam_sle ) { + if( ji->p ) { + jobs[i] = ji; + i++; + } } } + size_t totalpris = i; int result = EINVAL; - if( launchd_assumes(totalpris > 0) ) { - qsort((void *)jobs, totalpris, sizeof(job_t), (int (*)(const void *, const void *))job_cmp); + + /* It is conceivable that there could be no Jetsam jobs running. */ + if( totalpris > 0 ) { + /* Yay blocks! */ + qsort_b((void *)jobs, totalpris, sizeof(job_t), ^ int (const void *lhs, const void *rhs) { + job_t _lhs = *(job_t *)lhs; + job_t _rhs = *(job_t *)rhs; + /* Sort in descending order. (Priority correlates to the soonishness with which you will be killed.) */ + if( _lhs->jetsam_priority > _rhs->jetsam_priority ) { + return -1; + } else if( _lhs->jetsam_priority < _rhs->jetsam_priority ) { + return 1; + } + + return 0; + }); jetsam_priority_entry_t *jpris = (jetsam_priority_entry_t *)calloc(totalpris, sizeof(jetsam_priority_entry_t)); if( !launchd_assumes(jpris != NULL) ) { result = ENOMEM; } else { for( i = 0; i < totalpris; i++ ) { - jpris[i].pid = jobs[i]->p; + jpris[i].pid = jobs[i]->p; /* Subject to time-of-use vs. time-of-check, obviously. */ jpris[i].flags |= jobs[i]->jetsam_frontmost ? kJetsamFlagsFrontmost : 0; jpris[i].hiwat_pages = jobs[i]->jetsam_memlimit; } @@ -9041,7 +9046,10 @@ free(jpris); } } - free(jobs); + if( jobs ) { + free(jobs); + } + return result; } -------------- next part -------------- An HTML attachment was scrubbed... URL: From source_changes at macosforge.org Thu Oct 8 16:31:45 2009 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Thu, 8 Oct 2009 16:31:45 -0700 (PDT) Subject: [launchd-changes] [23938] branches/PR-7178164/launchd/src/launchd_core_logic.c Message-ID: <20091008233145.83B04295DF1C@beta.macosforge.org> Revision: 23938 http://trac.macosforge.org/projects/launchd/changeset/23938 Author: dsorresso at apple.com Date: 2009-10-08 16:31:44 -0700 (Thu, 08 Oct 2009) Log Message: ----------- Looks like it actually works now. Modified Paths: -------------- branches/PR-7178164/launchd/src/launchd_core_logic.c Modified: branches/PR-7178164/launchd/src/launchd_core_logic.c =================================================================== --- branches/PR-7178164/launchd/src/launchd_core_logic.c 2009-10-08 00:53:09 UTC (rev 23937) +++ branches/PR-7178164/launchd/src/launchd_core_logic.c 2009-10-08 23:31:44 UTC (rev 23938) @@ -470,9 +470,9 @@ int log_redirect_fd; int nice; int stdout_err_fd; - uint32_t jetsam_priority; - uint32_t jetsam_memlimit; - uint32_t main_thread_priority; + int32_t jetsam_priority; + int32_t jetsam_memlimit; + int32_t main_thread_priority; uint32_t timeout; uint32_t exit_timeout; uint64_t sent_signal_time; @@ -8920,7 +8920,7 @@ void jetsam_property_setup(launch_data_t obj, const char *key, job_t j) { - job_log(j, LOG_NOTICE, "Importing Jetsam job..."); + job_log(j, LOG_NOTICE, "Setting Jetsam properties for job..."); if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMPRIORITY) == 0 && launch_data_get_type(obj) == LAUNCH_DATA_INTEGER ) { j->jetsam_priority = (typeof(j->jetsam_priority))launch_data_get_integer(obj); job_log(j, LOG_NOTICE, "Priority: %d", j->jetsam_priority); @@ -8944,7 +8944,7 @@ if( !launchd_assumes(launch_data_get_type(priorities) == LAUNCH_DATA_ARRAY) ) { return EINVAL; } - + jobmgr_t jm = NULL; #if !TARGET_OS_EMBEDDED /* For testing. */ @@ -8989,12 +8989,10 @@ ji->jetsam_frontmost = launch_data_get_bool(frontmost); } - /* If the job wasn't in the Jetsam list before, add it. */ - if( job_assumes(ji, ji->jetsam_priority || ji->jetsam_frontmost || ji->jetsam_memlimit) ) { - if( !ji->jetsam_properties ) { - LIST_INSERT_HEAD(&ji->mgr->jetsam_jobs, ji, jetsam_sle); - ji->mgr->jetsam_jobs_cnt++; - } + if( !ji->jetsam_properties ) { + ji->jetsam_properties = true; + LIST_INSERT_HEAD(&ji->mgr->jetsam_jobs, ji, jetsam_sle); + ji->mgr->jetsam_jobs_cnt++; } } @@ -9039,9 +9037,8 @@ jpris[i].hiwat_pages = jobs[i]->jetsam_memlimit; } - int _result = 0; - launchd_assumes((_result = sysctlbyname("kern.memorystatus_priority_list", NULL, NULL, &jpris[0], totalpris * sizeof(jetsam_priority_entry_t))) != -1); - result = _result != 0 ? errno : 0; + launchd_assumes((result = sysctlbyname("kern.memorystatus_priority_list", NULL, NULL, &jpris[0], totalpris * sizeof(jetsam_priority_entry_t))) != -1); + result = result != 0 ? errno : 0; free(jpris); } -------------- next part -------------- An HTML attachment was scrubbed... URL: From source_changes at macosforge.org Mon Oct 12 15:23:13 2009 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Mon, 12 Oct 2009 15:23:13 -0700 (PDT) Subject: [launchd-changes] [23939] branches/PR-7178164/launchd/src/launchd_core_logic.c Message-ID: <20091012222314.1A3DE29CEC71@beta.macosforge.org> Revision: 23939 http://trac.macosforge.org/projects/launchd/changeset/23939 Author: dsorresso at apple.com Date: 2009-10-12 15:23:13 -0700 (Mon, 12 Oct 2009) Log Message: ----------- Added legacy support for old Jetsam plists. Modified Paths: -------------- branches/PR-7178164/launchd/src/launchd_core_logic.c Modified: branches/PR-7178164/launchd/src/launchd_core_logic.c =================================================================== --- branches/PR-7178164/launchd/src/launchd_core_logic.c 2009-10-08 23:31:44 UTC (rev 23938) +++ branches/PR-7178164/launchd/src/launchd_core_logic.c 2009-10-12 22:23:13 UTC (rev 23939) @@ -1897,6 +1897,17 @@ j->main_thread_priority = value; } break; + case 'j': + case 'J': + if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMPRIORITY) == 0 ) { + job_log(j, LOG_WARNING | LOG_CONSOLE, "Please change the JetsamPriority key to be in a dictionary named JetsamProperties."); + + launch_data_t pri = launch_data_new_integer(value); + if( job_assumes(j, pri != NULL) ) { + jetsam_property_setup(pri, LAUNCH_JOBKEY_JETSAMPRIORITY, j); + launch_data_free(pri); + } + } case 'n': case 'N': if (strcasecmp(key, LAUNCH_JOBKEY_NICE) == 0) { @@ -2048,11 +2059,6 @@ case 'j': case 'J': if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMPROPERTIES) == 0 ) { - if( job_assumes(j, !j->jetsam_properties) ) { - LIST_INSERT_HEAD(&j->mgr->jetsam_jobs, j, jetsam_sle); - j->mgr->jetsam_jobs_cnt++; - j->jetsam_properties = true; - } launch_data_dict_iterate(value, (void (*)(launch_data_t, const char *, void *))jetsam_property_setup, j); } case 'e': @@ -8920,15 +8926,17 @@ void jetsam_property_setup(launch_data_t obj, const char *key, job_t j) { - job_log(j, LOG_NOTICE, "Setting Jetsam properties for job..."); + job_log(j, LOG_NOTICE | LOG_CONSOLE, "Setting Jetsam properties for job..."); if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMPRIORITY) == 0 && launch_data_get_type(obj) == LAUNCH_DATA_INTEGER ) { j->jetsam_priority = (typeof(j->jetsam_priority))launch_data_get_integer(obj); - job_log(j, LOG_NOTICE, "Priority: %d", j->jetsam_priority); + job_log(j, LOG_NOTICE | LOG_CONSOLE, "Priority: %d", j->jetsam_priority); } else if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMMEMORYLIMIT) == 0 && launch_data_get_type(obj) == LAUNCH_DATA_INTEGER ) { j->jetsam_memlimit = (typeof(j->jetsam_memlimit))launch_data_get_integer(obj); - job_log(j, LOG_NOTICE, "Memory limit: %d", j->jetsam_memlimit); + job_log(j, LOG_NOTICE | LOG_CONSOLE, "Memory limit: %d", j->jetsam_memlimit); } else if( strcasecmp(key, LAUNCH_KEY_JETSAMFRONTMOST) == 0 ) { - /* Ignore. We only recognize this key so we don't complain. You can't set this in a plist. */ + /* Ignore. We only recognize this key so we don't complain when we get SpringBoard's request. + * You can't set this in a plist. + */ } else if( strcasecmp(key, LAUNCH_KEY_JETSAMLABEL) == 0 ) { /* Ignore. This key is present in SpringBoard's request dictionary, so we don't want to * complain about it. @@ -8936,6 +8944,12 @@ } else { job_log(j, LOG_ERR, "Unknown Jetsam key: %s", key); } + + if( unlikely(!j->jetsam_properties) ) { + j->jetsam_properties = true; + LIST_INSERT_HEAD(&j->mgr->jetsam_jobs, j, jetsam_sle); + j->mgr->jetsam_jobs_cnt++; + } } int @@ -8988,12 +9002,6 @@ if( (frontmost = launch_data_dict_lookup(ldi, LAUNCH_KEY_JETSAMFRONTMOST)) && launch_data_get_type(frontmost) == LAUNCH_DATA_BOOL ) { ji->jetsam_frontmost = launch_data_get_bool(frontmost); } - - if( !ji->jetsam_properties ) { - ji->jetsam_properties = true; - LIST_INSERT_HEAD(&ji->mgr->jetsam_jobs, ji, jetsam_sle); - ji->mgr->jetsam_jobs_cnt++; - } } i = 0; -------------- next part -------------- An HTML attachment was scrubbed... URL: From source_changes at macosforge.org Mon Oct 12 15:24:12 2009 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Mon, 12 Oct 2009 15:24:12 -0700 (PDT) Subject: [launchd-changes] [23940] branches/PR-7178164/launchd/src/launchd_core_logic.c Message-ID: <20091012222412.5CE5429CED10@beta.macosforge.org> Revision: 23940 http://trac.macosforge.org/projects/launchd/changeset/23940 Author: dsorresso at apple.com Date: 2009-10-12 15:24:11 -0700 (Mon, 12 Oct 2009) Log Message: ----------- Demoted debug messages. Modified Paths: -------------- branches/PR-7178164/launchd/src/launchd_core_logic.c Modified: branches/PR-7178164/launchd/src/launchd_core_logic.c =================================================================== --- branches/PR-7178164/launchd/src/launchd_core_logic.c 2009-10-12 22:23:13 UTC (rev 23939) +++ branches/PR-7178164/launchd/src/launchd_core_logic.c 2009-10-12 22:24:11 UTC (rev 23940) @@ -8926,13 +8926,13 @@ void jetsam_property_setup(launch_data_t obj, const char *key, job_t j) { - job_log(j, LOG_NOTICE | LOG_CONSOLE, "Setting Jetsam properties for job..."); + job_log(j, LOG_DEBUG, "Setting Jetsam properties for job..."); if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMPRIORITY) == 0 && launch_data_get_type(obj) == LAUNCH_DATA_INTEGER ) { j->jetsam_priority = (typeof(j->jetsam_priority))launch_data_get_integer(obj); - job_log(j, LOG_NOTICE | LOG_CONSOLE, "Priority: %d", j->jetsam_priority); + job_log(j, LOG_DEBUG, "Priority: %d", j->jetsam_priority); } else if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMMEMORYLIMIT) == 0 && launch_data_get_type(obj) == LAUNCH_DATA_INTEGER ) { j->jetsam_memlimit = (typeof(j->jetsam_memlimit))launch_data_get_integer(obj); - job_log(j, LOG_NOTICE | LOG_CONSOLE, "Memory limit: %d", j->jetsam_memlimit); + job_log(j, LOG_DEBUG, "Memory limit: %d", j->jetsam_memlimit); } else if( strcasecmp(key, LAUNCH_KEY_JETSAMFRONTMOST) == 0 ) { /* Ignore. We only recognize this key so we don't complain when we get SpringBoard's request. * You can't set this in a plist. -------------- next part -------------- An HTML attachment was scrubbed... URL: From source_changes at macosforge.org Tue Oct 13 14:19:27 2009 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 13 Oct 2009 14:19:27 -0700 (PDT) Subject: [launchd-changes] [23941] trunk Message-ID: <20091013211929.BFBE129F1561@beta.macosforge.org> Revision: 23941 http://trac.macosforge.org/projects/launchd/changeset/23941 Author: lindak at apple.com Date: 2009-10-13 14:19:24 -0700 (Tue, 13 Oct 2009) Log Message: ----------- launchd API to opt into memory limits Modified Paths: -------------- trunk/launchd/src/launch_priv.h trunk/launchd/src/launchd_core_logic.c Property Changed: ---------------- trunk/ trunk/launchd/src/bootstrap.h trunk/launchd/src/bootstrap_priv.h trunk/launchd/src/launch.h trunk/launchd/src/launch_internal.h trunk/launchd/src/launch_priv.h trunk/launchd/src/protocol_vproc.defs trunk/launchd/src/vproc.h trunk/launchd/src/vproc_internal.h trunk/launchd/src/vproc_priv.h Property changes on: trunk ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-5092682:23731-23742 /branches/PR-5898404:23681-23700 /branches/PR-5978442:23651-23701 /branches/PR-6132016:23719-23738 /branches/PR-6271234:23818-23822 /branches/PR-6562592:23812-23822 /branches/PR-6564965:23832-23851 /branches/PR-6589133:23810-23822 /branches/PR-6609410:23828 + /branches/PR-5092682:23731-23742 /branches/PR-5898404:23681-23700 /branches/PR-5978442:23651-23701 /branches/PR-6132016:23719-23738 /branches/PR-6271234:23818-23822 /branches/PR-6562592:23812-23822 /branches/PR-6564965:23832-23851 /branches/PR-6589133:23810-23822 /branches/PR-6609410:23828 /branches/PR-7178164:23935-23940 Property changes on: trunk/launchd/src/bootstrap.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-5898404/launchd/src/libbootstrap_public.h:23681-23700 /branches/PR-5978442/launchd/src/libbootstrap_public.h:23651-23701 /branches/PR-6271234/launchd/src/bootstrap.h:23818-23822 /branches/PR-6562592/launchd/src/bootstrap.h:23812-23822 /branches/PR-6564965/launchd/src/bootstrap.h:23832-23851 /branches/PR-6589133/launchd/src/bootstrap.h:23810-23822 /branches/PR-6609410/launchd/src/bootstrap.h:23828 + /branches/PR-5898404/launchd/src/libbootstrap_public.h:23681-23700 /branches/PR-5978442/launchd/src/libbootstrap_public.h:23651-23701 /branches/PR-6271234/launchd/src/bootstrap.h:23818-23822 /branches/PR-6562592/launchd/src/bootstrap.h:23812-23822 /branches/PR-6564965/launchd/src/bootstrap.h:23832-23851 /branches/PR-6589133/launchd/src/bootstrap.h:23810-23822 /branches/PR-6609410/launchd/src/bootstrap.h:23828 /branches/PR-7178164/launchd/src/bootstrap.h:23935-23940 Property changes on: trunk/launchd/src/bootstrap_priv.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-5898404/launchd/src/libbootstrap_private.h:23681-23700 /branches/PR-5978442/launchd/src/libbootstrap_private.h:23651-23701 /branches/PR-6271234/launchd/src/bootstrap_priv.h:23818-23822 /branches/PR-6562592/launchd/src/bootstrap_priv.h:23812-23822 /branches/PR-6564965/launchd/src/bootstrap_priv.h:23832-23851 /branches/PR-6589133/launchd/src/bootstrap_priv.h:23810-23822 /branches/PR-6609410/launchd/src/bootstrap_priv.h:23828 + /branches/PR-5898404/launchd/src/libbootstrap_private.h:23681-23700 /branches/PR-5978442/launchd/src/libbootstrap_private.h:23651-23701 /branches/PR-6271234/launchd/src/bootstrap_priv.h:23818-23822 /branches/PR-6562592/launchd/src/bootstrap_priv.h:23812-23822 /branches/PR-6564965/launchd/src/bootstrap_priv.h:23832-23851 /branches/PR-6589133/launchd/src/bootstrap_priv.h:23810-23822 /branches/PR-6609410/launchd/src/bootstrap_priv.h:23828 /branches/PR-7178164/launchd/src/bootstrap_priv.h:23935-23940 Property changes on: trunk/launchd/src/launch.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-5898404/launchd/src/liblaunch_public.h:23681-23700 /branches/PR-5978442/launchd/src/liblaunch_public.h:23651-23701 /branches/PR-6271234/launchd/src/launch.h:23818-23822 /branches/PR-6562592/launchd/src/launch.h:23812-23822 /branches/PR-6564965/launchd/src/launch.h:23832-23851 /branches/PR-6589133/launchd/src/launch.h:23810-23822 /branches/PR-6609410/launchd/src/launch.h:23828 + /branches/PR-5898404/launchd/src/liblaunch_public.h:23681-23700 /branches/PR-5978442/launchd/src/liblaunch_public.h:23651-23701 /branches/PR-6271234/launchd/src/launch.h:23818-23822 /branches/PR-6562592/launchd/src/launch.h:23812-23822 /branches/PR-6564965/launchd/src/launch.h:23832-23851 /branches/PR-6589133/launchd/src/launch.h:23810-23822 /branches/PR-6609410/launchd/src/launch.h:23828 /branches/PR-7178164/launchd/src/launch.h:23935-23940 Property changes on: trunk/launchd/src/launch_internal.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-5898404/launchd/src/liblaunch_internal.h:23681-23700 /branches/PR-5978442/launchd/src/liblaunch_internal.h:23651-23701 /branches/PR-6271234/launchd/src/launch_internal.h:23818-23822 /branches/PR-6562592/launchd/src/launch_internal.h:23812-23822 /branches/PR-6564965/launchd/src/launch_internal.h:23832-23851 /branches/PR-6589133/launchd/src/launch_internal.h:23810-23822 /branches/PR-6609410/launchd/src/launch_internal.h:23828 + /branches/PR-5898404/launchd/src/liblaunch_internal.h:23681-23700 /branches/PR-5978442/launchd/src/liblaunch_internal.h:23651-23701 /branches/PR-6271234/launchd/src/launch_internal.h:23818-23822 /branches/PR-6562592/launchd/src/launch_internal.h:23812-23822 /branches/PR-6564965/launchd/src/launch_internal.h:23832-23851 /branches/PR-6589133/launchd/src/launch_internal.h:23810-23822 /branches/PR-6609410/launchd/src/launch_internal.h:23828 /branches/PR-7178164/launchd/src/launch_internal.h:23935-23940 Modified: trunk/launchd/src/launch_priv.h =================================================================== --- trunk/launchd/src/launch_priv.h 2009-10-12 22:24:11 UTC (rev 23940) +++ trunk/launchd/src/launch_priv.h 2009-10-13 21:19:24 UTC (rev 23941) @@ -49,18 +49,21 @@ #define LAUNCH_KEY_BATCHQUERY "BatchQuery" #define LAUNCHD_DO_APPLE_INTERNAL_LOGGING "__DoAppleInternalLogging__" -#define LAUNCH_KEY_JETSAMLABEL "JetsamLabel" -#define LAUNCH_KEY_JETSAMFRONTMOST "JetsamFrontmost" -#define LAUNCH_KEY_JETSAMPRIORITY "JetsamPriority" - #define LAUNCH_JOBKEY_TRANSACTIONCOUNT "TransactionCount" #define LAUNCH_JOBKEY_QUARANTINEDATA "QuarantineData" #define LAUNCH_JOBKEY_SANDBOXPROFILE "SandboxProfile" #define LAUNCH_JOBKEY_SANDBOXFLAGS "SandboxFlags" #define LAUNCH_JOBKEY_SANDBOX_NAMED "Named" +#define LAUNCH_JOBKEY_JETSAMPROPERTIES "JetsamProperties" #define LAUNCH_JOBKEY_JETSAMPRIORITY "JetsamPriority" +#define LAUNCH_JOBKEY_JETSAMMEMORYLIMIT "JetsamMemoryLimit" #define LAUNCH_JOBKEY_SECURITYSESSIONUUID "SecuritySessionUUID" +#define LAUNCH_KEY_JETSAMLABEL "JetsamLabel" +#define LAUNCH_KEY_JETSAMFRONTMOST "JetsamFrontmost" +#define LAUNCH_KEY_JETSAMPRIORITY LAUNCH_JOBKEY_JETSAMPRIORITY +#define LAUNCH_KEY_JETSAMMEMORYLIMIT LAUNCH_JOBKEY_JETSAMMEMORYLIMIT + #define LAUNCH_JOBKEY_EMBEDDEDPRIVILEGEDISPENSATION "EmbeddedPrivilegeDispensation" #define LAUNCH_JOBKEY_EMBEDDEDMAINTHREADPRIORITY "EmbeddedMainThreadPriority" Property changes on: trunk/launchd/src/launch_priv.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-5898404/launchd/src/liblaunch_private.h:23681-23700 /branches/PR-5978442/launchd/src/liblaunch_private.h:23651-23701 /branches/PR-6271234/launchd/src/launch_priv.h:23818-23822 /branches/PR-6562592/launchd/src/launch_priv.h:23812-23822 /branches/PR-6564965/launchd/src/launch_priv.h:23832-23851 /branches/PR-6589133/launchd/src/launch_priv.h:23810-23822 /branches/PR-6609410/launchd/src/launch_priv.h:23828 + /branches/PR-5898404/launchd/src/liblaunch_private.h:23681-23700 /branches/PR-5978442/launchd/src/liblaunch_private.h:23651-23701 /branches/PR-6271234/launchd/src/launch_priv.h:23818-23822 /branches/PR-6562592/launchd/src/launch_priv.h:23812-23822 /branches/PR-6564965/launchd/src/launch_priv.h:23832-23851 /branches/PR-6589133/launchd/src/launch_priv.h:23810-23822 /branches/PR-6609410/launchd/src/launch_priv.h:23828 /branches/PR-7178164/launchd/src/launch_priv.h:23935-23940 Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2009-10-12 22:24:11 UTC (rev 23940) +++ trunk/launchd/src/launchd_core_logic.c 2009-10-13 21:19:24 UTC (rev 23941) @@ -91,8 +91,12 @@ #else /* To make my life easier. */ typedef struct jetsam_priority_entry { - pid_t pid; - uint32_t flags; + pid_t pid; + uint32_t flags; + int32_t hiwat_pages; + int32_t hiwat_reserved1; + int32_t hiwat_reserved2; + int32_t hiwat_reserved3; } jetsam_priority_entry_t; enum { @@ -133,7 +137,6 @@ #define LAUNCHD_DEFAULT_EXIT_TIMEOUT 20 #define LAUNCHD_SIGKILL_TIMER 5 #define LAUNCHD_CLEAN_KILL_TIMER 1 -#define LAUNCHD_JETSAM_PRIORITY_UNSET 0xdead1eebabell #define SHUTDOWN_LOG_DIR "/var/log/shutdown" @@ -276,6 +279,8 @@ static void seatbelt_setup_flags(launch_data_t obj, const char *key, void *context); #endif +static void jetsam_property_setup(launch_data_t obj, const char *key, job_t j); + typedef enum { NETWORK_UP = 1, NETWORK_DOWN, @@ -465,8 +470,9 @@ int log_redirect_fd; int nice; int stdout_err_fd; - long long jetsam_priority; - long long main_thread_priority; + int32_t jetsam_priority; + int32_t jetsam_memlimit; + int32_t main_thread_priority; uint32_t timeout; uint32_t exit_timeout; uint64_t sent_signal_time; @@ -541,7 +547,8 @@ clean_exit_timer_expired :1, /* The job was clean, received SIGKILL and failed to exit after LAUNCHD_CLEAN_KILL_TIMER seconds. */ embedded_special_privileges :1, /* The job runs as a non-root user on embedded but has select privileges of the root user. */ did_exec :1, /* The job exec(2)ed successfully. */ - migratory :1; /* The (anonymous) job called vprocmgr_switch_to_session(). */ + migratory :1, /* The (anonymous) job called vprocmgr_switch_to_session(). */ + jetsam_properties :1; /* The job has Jetsam limits in place. */ mode_t mask; pid_t tracing_pid; mach_port_t audit_session; @@ -637,11 +644,6 @@ void eliminate_double_reboot(void); -/* For Jetsam. */ -static void jetsam_priority_from_job(job_t j, bool front, jetsam_priority_entry_t *jp); -static int job_cmp(const job_t *lhs, const job_t *rhs); -int launchd_set_jetsam_priorities(launch_data_t priorities); - /* file local globals */ static size_t total_children; static size_t total_anon_children; @@ -1199,7 +1201,7 @@ /* Not a big deal if this fails. It means that the timer's already been freed. */ kevent_mod((uintptr_t)&j->exit_timeout, EVFILT_TIMER, EV_DELETE, 0, 0, NULL); } - if( j->jetsam_priority != LAUNCHD_JETSAM_PRIORITY_UNSET ) { + if( j->jetsam_properties ) { LIST_REMOVE(j, jetsam_sle); j->mgr->jetsam_jobs_cnt--; } @@ -1531,7 +1533,8 @@ j->currently_ignored = true; j->ondemand = true; j->checkedin = true; - j->jetsam_priority = LAUNCHD_JETSAM_PRIORITY_UNSET; + j->jetsam_priority = -1; + j->jetsam_memlimit = -1; uuid_clear(j->expected_audit_uuid); if (prog) { @@ -1897,12 +1900,14 @@ case 'j': case 'J': if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMPRIORITY) == 0 ) { - job_log(j, LOG_DEBUG, "Importing job with priority: %lld", value); - j->jetsam_priority = (typeof(j->jetsam_priority))value; - LIST_INSERT_HEAD(&j->mgr->jetsam_jobs, j, jetsam_sle); - j->mgr->jetsam_jobs_cnt++; + job_log(j, LOG_WARNING | LOG_CONSOLE, "Please change the JetsamPriority key to be in a dictionary named JetsamProperties."); + + launch_data_t pri = launch_data_new_integer(value); + if( job_assumes(j, pri != NULL) ) { + jetsam_property_setup(pri, LAUNCH_JOBKEY_JETSAMPRIORITY, j); + launch_data_free(pri); + } } - break; case 'n': case 'N': if (strcasecmp(key, LAUNCH_JOBKEY_NICE) == 0) { @@ -2051,6 +2056,11 @@ } } break; + case 'j': + case 'J': + if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMPROPERTIES) == 0 ) { + launch_data_dict_iterate(value, (void (*)(launch_data_t, const char *, void *))jetsam_property_setup, j); + } case 'e': case 'E': if (strcasecmp(key, LAUNCH_JOBKEY_ENVIRONMENTVARIABLES) == 0) { @@ -4181,7 +4191,7 @@ } #if !TARGET_OS_EMBEDDED - if( j->jetsam_priority != LAUNCHD_JETSAM_PRIORITY_UNSET ) { + if( j->jetsam_properties ) { job_assumes(j, proc_setpcontrol(PROC_SETPC_TERMINATE) == 0); } #endif @@ -8913,26 +8923,33 @@ } } -static void -jetsam_priority_from_job(job_t j, bool front, jetsam_priority_entry_t *jp) +void +jetsam_property_setup(launch_data_t obj, const char *key, job_t j) { - jp->pid = j->p; - jp->flags |= front ? kJetsamFlagsFrontmost : 0; -} - -static int -job_cmp(const job_t *lhs, const job_t *rhs) -{ - job_t _lhs = *lhs; - job_t _rhs = *rhs; - /* Sort in descending order. (Priority correlates to the soonishness with which you will be killed.) */ - if( _lhs->jetsam_priority > _rhs->jetsam_priority ) { - return -1; - } else if( _lhs->jetsam_priority < _rhs->jetsam_priority ) { - return 1; + job_log(j, LOG_DEBUG, "Setting Jetsam properties for job..."); + if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMPRIORITY) == 0 && launch_data_get_type(obj) == LAUNCH_DATA_INTEGER ) { + j->jetsam_priority = (typeof(j->jetsam_priority))launch_data_get_integer(obj); + job_log(j, LOG_DEBUG, "Priority: %d", j->jetsam_priority); + } else if( strcasecmp(key, LAUNCH_JOBKEY_JETSAMMEMORYLIMIT) == 0 && launch_data_get_type(obj) == LAUNCH_DATA_INTEGER ) { + j->jetsam_memlimit = (typeof(j->jetsam_memlimit))launch_data_get_integer(obj); + job_log(j, LOG_DEBUG, "Memory limit: %d", j->jetsam_memlimit); + } else if( strcasecmp(key, LAUNCH_KEY_JETSAMFRONTMOST) == 0 ) { + /* Ignore. We only recognize this key so we don't complain when we get SpringBoard's request. + * You can't set this in a plist. + */ + } else if( strcasecmp(key, LAUNCH_KEY_JETSAMLABEL) == 0 ) { + /* Ignore. This key is present in SpringBoard's request dictionary, so we don't want to + * complain about it. + */ + } else { + job_log(j, LOG_ERR, "Unknown Jetsam key: %s", key); } - return 0; + if( unlikely(!j->jetsam_properties) ) { + j->jetsam_properties = true; + LIST_INSERT_HEAD(&j->mgr->jetsam_jobs, j, jetsam_sle); + j->mgr->jetsam_jobs_cnt++; + } } int @@ -8941,7 +8958,7 @@ if( !launchd_assumes(launch_data_get_type(priorities) == LAUNCH_DATA_ARRAY) ) { return EINVAL; } - + jobmgr_t jm = NULL; #if !TARGET_OS_EMBEDDED /* For testing. */ @@ -8978,58 +8995,66 @@ if( !launchd_assumes(ji != NULL) ) { continue; } - - launch_data_t pri; - long long _pri = 0; - if( !launchd_assumes(pri = launch_data_dict_lookup(ldi, LAUNCH_KEY_JETSAMPRIORITY)) ) { - continue; - } - _pri = launch_data_get_integer(pri); - - if( ji->jetsam_priority == LAUNCHD_JETSAM_PRIORITY_UNSET ) { - LIST_INSERT_HEAD(&ji->mgr->jetsam_jobs, ji, jetsam_sle); - ji->mgr->jetsam_jobs_cnt++; - } - ji->jetsam_priority = _pri; - + + launch_data_dict_iterate(ldi, (void (*)(launch_data_t, const char *, void *))jetsam_property_setup, ji); + launch_data_t frontmost = NULL; - if( !(frontmost = launch_data_dict_lookup(ldi, LAUNCH_KEY_JETSAMFRONTMOST)) ) { - ji->jetsam_frontmost = false; - continue; + if( (frontmost = launch_data_dict_lookup(ldi, LAUNCH_KEY_JETSAMFRONTMOST)) && launch_data_get_type(frontmost) == LAUNCH_DATA_BOOL ) { + ji->jetsam_frontmost = launch_data_get_bool(frontmost); } - ji->jetsam_frontmost = launch_data_get_bool(frontmost); } i = 0; job_t *jobs = (job_t *)calloc(jm->jetsam_jobs_cnt, sizeof(job_t)); - LIST_FOREACH( ji, &jm->jetsam_jobs, jetsam_sle ) { - if( ji->p ) { - jobs[i] = ji; - i++; + if( launchd_assumes(jobs != NULL) ) { + LIST_FOREACH( ji, &jm->jetsam_jobs, jetsam_sle ) { + if( ji->p ) { + jobs[i] = ji; + i++; + } } } + size_t totalpris = i; int result = EINVAL; - if( launchd_assumes(totalpris > 0) ) { - qsort((void *)jobs, totalpris, sizeof(job_t), (int (*)(const void *, const void *))job_cmp); + + /* It is conceivable that there could be no Jetsam jobs running. */ + if( totalpris > 0 ) { + /* Yay blocks! */ + qsort_b((void *)jobs, totalpris, sizeof(job_t), ^ int (const void *lhs, const void *rhs) { + job_t _lhs = *(job_t *)lhs; + job_t _rhs = *(job_t *)rhs; + /* Sort in descending order. (Priority correlates to the soonishness with which you will be killed.) */ + if( _lhs->jetsam_priority > _rhs->jetsam_priority ) { + return -1; + } else if( _lhs->jetsam_priority < _rhs->jetsam_priority ) { + return 1; + } + + return 0; + }); jetsam_priority_entry_t *jpris = (jetsam_priority_entry_t *)calloc(totalpris, sizeof(jetsam_priority_entry_t)); if( !launchd_assumes(jpris != NULL) ) { result = ENOMEM; } else { for( i = 0; i < totalpris; i++ ) { - jetsam_priority_from_job(jobs[i], jobs[i]->jetsam_frontmost, &jpris[i]); + jpris[i].pid = jobs[i]->p; /* Subject to time-of-use vs. time-of-check, obviously. */ + jpris[i].flags |= jobs[i]->jetsam_frontmost ? kJetsamFlagsFrontmost : 0; + jpris[i].hiwat_pages = jobs[i]->jetsam_memlimit; } - int _result = 0; - launchd_assumes((_result = sysctlbyname("kern.memorystatus_priority_list", NULL, NULL, &jpris[0], totalpris * sizeof(jetsam_priority_entry_t))) != -1); - result = _result != 0 ? errno : 0; + launchd_assumes((result = sysctlbyname("kern.memorystatus_priority_list", NULL, NULL, &jpris[0], totalpris * sizeof(jetsam_priority_entry_t))) != -1); + result = result != 0 ? errno : 0; free(jpris); } } - free(jobs); + if( jobs ) { + free(jobs); + } + return result; } Property changes on: trunk/launchd/src/protocol_vproc.defs ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-5092682/launchd/src/protocol_job.defs:23731-23742 /branches/PR-5898404/launchd/src/protocol_job.defs:23681-23700 /branches/PR-5978442/launchd/src/protocol_job.defs:23651-23701 /branches/PR-6132016/launchd/src/protocol_job.defs:23719-23738 /branches/PR-6271234/launchd/src/protocol_vproc.defs:23818-23822 /branches/PR-6562592/launchd/src/protocol_vproc.defs:23812-23822 /branches/PR-6564965/launchd/src/protocol_vproc.defs:23832-23851 /branches/PR-6589133/launchd/src/protocol_vproc.defs:23810-23822 /branches/PR-6609410/launchd/src/protocol_vproc.defs:23828 + /branches/PR-5092682/launchd/src/protocol_job.defs:23731-23742 /branches/PR-5898404/launchd/src/protocol_job.defs:23681-23700 /branches/PR-5978442/launchd/src/protocol_job.defs:23651-23701 /branches/PR-6132016/launchd/src/protocol_job.defs:23719-23738 /branches/PR-6271234/launchd/src/protocol_vproc.defs:23818-23822 /branches/PR-6562592/launchd/src/protocol_vproc.defs:23812-23822 /branches/PR-6564965/launchd/src/protocol_vproc.defs:23832-23851 /branches/PR-6589133/launchd/src/protocol_vproc.defs:23810-23822 /branches/PR-6609410/launchd/src/protocol_vproc.defs:23828 /branches/PR-7178164/launchd/src/protocol_vproc.defs:23935-23940 Property changes on: trunk/launchd/src/vproc.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-5092682/launchd/src/libvproc_public.h:23731-23742 /branches/PR-5898404/launchd/src/libvproc_public.h:23681-23700 /branches/PR-5978442/launchd/src/libvproc_public.h:23651-23701 /branches/PR-6132016/launchd/src/libvproc_public.h:23719-23738 /branches/PR-6271234/launchd/src/vproc.h:23818-23822 /branches/PR-6562592/launchd/src/vproc.h:23812-23822 /branches/PR-6564965/launchd/src/vproc.h:23832-23851 /branches/PR-6589133/launchd/src/vproc.h:23810-23822 /branches/PR-6609410/launchd/src/vproc.h:23828 + /branches/PR-5092682/launchd/src/libvproc_public.h:23731-23742 /branches/PR-5898404/launchd/src/libvproc_public.h:23681-23700 /branches/PR-5978442/launchd/src/libvproc_public.h:23651-23701 /branches/PR-6132016/launchd/src/libvproc_public.h:23719-23738 /branches/PR-6271234/launchd/src/vproc.h:23818-23822 /branches/PR-6562592/launchd/src/vproc.h:23812-23822 /branches/PR-6564965/launchd/src/vproc.h:23832-23851 /branches/PR-6589133/launchd/src/vproc.h:23810-23822 /branches/PR-6609410/launchd/src/vproc.h:23828 /branches/PR-7178164/launchd/src/vproc.h:23935-23940 Property changes on: trunk/launchd/src/vproc_internal.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-5898404/launchd/src/libvproc_internal.h:23681-23700 /branches/PR-5978442/launchd/src/libvproc_internal.h:23651-23701 /branches/PR-6271234/launchd/src/vproc_internal.h:23818-23822 /branches/PR-6562592/launchd/src/vproc_internal.h:23812-23822 /branches/PR-6564965/launchd/src/vproc_internal.h:23832-23851 /branches/PR-6589133/launchd/src/vproc_internal.h:23810-23822 /branches/PR-6609410/launchd/src/vproc_internal.h:23828 + /branches/PR-5898404/launchd/src/libvproc_internal.h:23681-23700 /branches/PR-5978442/launchd/src/libvproc_internal.h:23651-23701 /branches/PR-6271234/launchd/src/vproc_internal.h:23818-23822 /branches/PR-6562592/launchd/src/vproc_internal.h:23812-23822 /branches/PR-6564965/launchd/src/vproc_internal.h:23832-23851 /branches/PR-6589133/launchd/src/vproc_internal.h:23810-23822 /branches/PR-6609410/launchd/src/vproc_internal.h:23828 /branches/PR-7178164/launchd/src/vproc_internal.h:23935-23940 Property changes on: trunk/launchd/src/vproc_priv.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-5092682/launchd/src/libvproc_private.h:23731-23742 /branches/PR-5898404/launchd/src/libvproc_private.h:23681-23700 /branches/PR-5978442/launchd/src/libvproc_private.h:23651-23701 /branches/PR-6132016/launchd/src/libvproc_private.h:23719-23738 /branches/PR-6271234/launchd/src/vproc_priv.h:23818-23822 /branches/PR-6562592/launchd/src/vproc_priv.h:23812-23822 /branches/PR-6564965/launchd/src/vproc_priv.h:23832-23851 /branches/PR-6589133/launchd/src/vproc_priv.h:23810-23822 /branches/PR-6609410/launchd/src/vproc_priv.h:23828 + /branches/PR-5092682/launchd/src/libvproc_private.h:23731-23742 /branches/PR-5898404/launchd/src/libvproc_private.h:23681-23700 /branches/PR-5978442/launchd/src/libvproc_private.h:23651-23701 /branches/PR-6132016/launchd/src/libvproc_private.h:23719-23738 /branches/PR-6271234/launchd/src/vproc_priv.h:23818-23822 /branches/PR-6562592/launchd/src/vproc_priv.h:23812-23822 /branches/PR-6564965/launchd/src/vproc_priv.h:23832-23851 /branches/PR-6589133/launchd/src/vproc_priv.h:23810-23822 /branches/PR-6609410/launchd/src/vproc_priv.h:23828 /branches/PR-7178164/launchd/src/vproc_priv.h:23935-23940 -------------- next part -------------- An HTML attachment was scrubbed... URL: From source_changes at macosforge.org Tue Oct 13 14:22:08 2009 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 13 Oct 2009 14:22:08 -0700 (PDT) Subject: [launchd-changes] [23942] tags/launchd-329/ Message-ID: <20091013212208.31A2329F15B4@beta.macosforge.org> Revision: 23942 http://trac.macosforge.org/projects/launchd/changeset/23942 Author: lindak at apple.com Date: 2009-10-13 14:22:07 -0700 (Tue, 13 Oct 2009) Log Message: ----------- tagging launchd-329 Added Paths: ----------- tags/launchd-329/ Property changes on: tags/launchd-329 ___________________________________________________________________ Added: svn:ignore + build Added: svn:mergeinfo + /branches/PR-5092682:23731-23742 /branches/PR-5898404:23681-23700 /branches/PR-5978442:23651-23701 /branches/PR-6132016:23719-23738 /branches/PR-6271234:23818-23822 /branches/PR-6562592:23812-23822 /branches/PR-6564965:23832-23851 /branches/PR-6589133:23810-23822 /branches/PR-6609410:23828 /branches/PR-7178164:23935-23940 -------------- next part -------------- An HTML attachment was scrubbed... URL: From source_changes at macosforge.org Thu Oct 22 16:17:21 2009 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Thu, 22 Oct 2009 16:17:21 -0700 (PDT) Subject: [launchd-changes] [23943] branches/PR-7084138/ Message-ID: <20091022231722.33C5A2B0839C@beta.macosforge.org> Revision: 23943 http://trac.macosforge.org/projects/launchd/changeset/23943 Author: dsorresso at apple.com Date: 2009-10-22 16:17:18 -0700 (Thu, 22 Oct 2009) Log Message: ----------- "Branch for PR-7084138 from https://svn.macosforge.org/repository/launchd/trunk" Added Paths: ----------- branches/PR-7084138/ Property changes on: branches/PR-7084138 ___________________________________________________________________ Added: svn:ignore + build Added: svn:mergeinfo + /branches/PR-5092682:23731-23742 /branches/PR-5898404:23681-23700 /branches/PR-5978442:23651-23701 /branches/PR-6132016:23719-23738 /branches/PR-6271234:23818-23822 /branches/PR-6562592:23812-23822 /branches/PR-6564965:23832-23851 /branches/PR-6589133:23810-23822 /branches/PR-6609410:23828 /branches/PR-7178164:23935-23940 -------------- next part -------------- An HTML attachment was scrubbed... URL: From source_changes at macosforge.org Thu Oct 22 16:22:05 2009 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Thu, 22 Oct 2009 16:22:05 -0700 (PDT) Subject: [launchd-changes] [23944] branches/PR-7084138/launchd/src/launchd_core_logic.c Message-ID: <20091022232205.9D3732B084EF@beta.macosforge.org> Revision: 23944 http://trac.macosforge.org/projects/launchd/changeset/23944 Author: dsorresso at apple.com Date: 2009-10-22 16:22:04 -0700 (Thu, 22 Oct 2009) Log Message: ----------- Fix for rdar://problem/7084138. Modified Paths: -------------- branches/PR-7084138/launchd/src/launchd_core_logic.c Modified: branches/PR-7084138/launchd/src/launchd_core_logic.c =================================================================== --- branches/PR-7084138/launchd/src/launchd_core_logic.c 2009-10-22 23:17:18 UTC (rev 23943) +++ branches/PR-7084138/launchd/src/launchd_core_logic.c 2009-10-22 23:22:04 UTC (rev 23944) @@ -8608,7 +8608,7 @@ job_handle_mpm_wait(NULL, MACH_PORT_NULL, NULL); } struct ldcred *ldc = runtime_get_caller_creds(); - job_t calling_j = job_mig_intran2(j->mgr, MACH_PORT_NULL, ldc->pid); + job_t calling_j = jobmgr_find_by_pid(j->mgr, ldc->pid, true); return job_mig_wait2(calling_j, j, srp, waitstatus, true); #endif @@ -8627,7 +8627,17 @@ return BOOTSTRAP_NO_MEMORY; } - if( target_j->p == 0 ) { + /* See rdar://problem/7084138 for why we do the second part of this check. + * Basically, since Finder, Dock and SystemUIServer are now real launchd + * jobs, they don't get removed after exiting, like legacy LaunchServices + * jobs do. So there's a race. coreservicesd came in asking for the exit + * status after we'd relaunched Finder, so Finder's PID isn't 0. + * + * So we check to make sure the target job isn't a LaunchServices job and + * that the request is coming through the legacy path (mpm_wait()). If so, + * we return the last exit status, regardless of the current PID value. + */ + if( target_j->p == 0 || (!target_j->legacy_LS_job && legacy) ) { *status = target_j->last_exit_status; return BOOTSTRAP_SUCCESS; } -------------- next part -------------- An HTML attachment was scrubbed... URL: