From source_changes at macosforge.org Mon Mar 3 16:46:01 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Mon, 3 Mar 2008 16:46:01 -0800 (PST) Subject: [launchd-changes] [23526] trunk/launchd/src/launchd_core_logic.c Message-ID: <20080304004601.2B3121457718@beta.macosforge.org> Revision: 23526 http://trac.macosforge.org/projects/launchd/changeset/23526 Author: zarzycki at apple.com Date: 2008-03-03 16:46:00 -0800 (Mon, 03 Mar 2008) Log Message: ----------- Misc. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-02-26 21:39:33 UTC (rev 23525) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-04 00:46:00 UTC (rev 23526) @@ -6011,6 +6011,7 @@ struct machservice *ms; struct ldcred *ldc = runtime_get_caller_creds(); kern_return_t kr; + bool per_pid_lookup = flags & BOOTSTRAP_PER_PID_SERVICE; if (!launchd_assumes(j != NULL)) { return BOOTSTRAP_NO_MEMORY; @@ -6023,12 +6024,12 @@ } #endif - if (unlikely(!mspolicy_check(j, servicename, flags & BOOTSTRAP_PER_PID_SERVICE))) { + if (unlikely(!mspolicy_check(j, servicename, per_pid_lookup))) { job_log(j, LOG_NOTICE, "Policy denied Mach service lookup: %s", servicename); return BOOTSTRAP_NOT_PRIVILEGED; } - if (flags & BOOTSTRAP_PER_PID_SERVICE) { + if (per_pid_lookup) { ms = jobmgr_lookup_service(j->mgr, servicename, false, target_pid); } else { ms = jobmgr_lookup_service(j->mgr, servicename, true, 0); @@ -6044,9 +6045,10 @@ if (likely(ms)) { job_assumes(j, machservice_port(ms) != MACH_PORT_NULL); - job_log(j, LOG_DEBUG, "%sMach service lookup: %s", flags & BOOTSTRAP_PER_PID_SERVICE ? "Per PID " : "", servicename); + job_log(j, LOG_DEBUG, "%sMach service lookup: %s", per_pid_lookup ? "Per PID " : "", servicename); - if (unlikely(j->lastlookup == ms && j->lastlookup_gennum == ms->gen_num && !j->per_user)) { + if (unlikely(!per_pid_lookup && j->lastlookup == ms && j->lastlookup_gennum == ms->gen_num && !j->per_user)) { + /* we need to think more about the per_pid_lookup logic before logging about repeated lookups */ job_log(j, LOG_APPLEONLY, "Performance: Please fix the framework that talks to \"%s\" to cache the Mach port for service: %s", ms->job->label, servicename); } @@ -6056,7 +6058,7 @@ *serviceportp = machservice_port(ms); kr = BOOTSTRAP_SUCCESS; - } else if (!(flags & BOOTSTRAP_PER_PID_SERVICE) && (inherited_bootstrap_port != MACH_PORT_NULL)) { + } else if (!per_pid_lookup && (inherited_bootstrap_port != MACH_PORT_NULL)) { job_log(j, LOG_DEBUG, "Mach service lookup forwarded: %s", servicename); job_assumes(j, vproc_mig_look_up2_forward(inherited_bootstrap_port, srp, servicename, 0, 0) == 0); /* The previous routine moved the reply port, we're forced to return MIG_NO_REPLY now */ @@ -6070,7 +6072,7 @@ */ return VPROC_ERR_TRY_PER_USER; } else { - job_log(j, LOG_DEBUG, "%sMach service lookup failed: %s", flags & BOOTSTRAP_PER_PID_SERVICE ? "Per PID " : "", servicename); + job_log(j, LOG_DEBUG, "%sMach service lookup failed: %s", per_pid_lookup ? "Per PID " : "", servicename); kr = BOOTSTRAP_UNKNOWN_SERVICE; } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080303/621602c3/attachment.html From source_changes at macosforge.org Tue Mar 4 09:48:07 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 4 Mar 2008 09:48:07 -0800 (PST) Subject: [launchd-changes] [23528] branches/SULeopard/launchd/src/launchd_runtime.c Message-ID: <20080304174807.69773145B68A@beta.macosforge.org> Revision: 23528 http://trac.macosforge.org/projects/launchd/changeset/23528 Author: zarzycki at apple.com Date: 2008-03-04 09:48:07 -0800 (Tue, 04 Mar 2008) Log Message: ----------- Misc. Modified Paths: -------------- branches/SULeopard/launchd/src/launchd_runtime.c Modified: branches/SULeopard/launchd/src/launchd_runtime.c =================================================================== --- branches/SULeopard/launchd/src/launchd_runtime.c 2008-03-04 17:48:00 UTC (rev 23527) +++ branches/SULeopard/launchd/src/launchd_runtime.c 2008-03-04 17:48:07 UTC (rev 23528) @@ -275,7 +275,6 @@ FLAGIF(RB_ASKNAME) else FLAGIF(RB_SINGLE) else FLAGIF(RB_NOSYNC) - else FLAGIF(RB_KDB) else FLAGIF(RB_HALT) else FLAGIF(RB_INITNAME) else FLAGIF(RB_DFLTROOT) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080304/637b144c/attachment-0001.html From source_changes at macosforge.org Tue Mar 4 09:48:01 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 4 Mar 2008 09:48:01 -0800 (PST) Subject: [launchd-changes] [23527] branches/SULeopard/launchd/src/launchd_core_logic.c Message-ID: <20080304174801.66D6D145B66B@beta.macosforge.org> Revision: 23527 http://trac.macosforge.org/projects/launchd/changeset/23527 Author: zarzycki at apple.com Date: 2008-03-04 09:48:00 -0800 (Tue, 04 Mar 2008) Log Message: ----------- HopefullyExitsFirst jobs can't start OnDemand jobs Modified Paths: -------------- branches/SULeopard/launchd/src/launchd_core_logic.c Modified: branches/SULeopard/launchd/src/launchd_core_logic.c =================================================================== --- branches/SULeopard/launchd/src/launchd_core_logic.c 2008-03-04 00:46:00 UTC (rev 23526) +++ branches/SULeopard/launchd/src/launchd_core_logic.c 2008-03-04 17:48:00 UTC (rev 23527) @@ -3834,7 +3834,7 @@ } else if (j->removal_pending) { job_log(j, LOG_DEBUG, "Exited while removal was pending."); return true; - } else if (j->mgr->shutting_down) { + } else if (j->mgr->shutting_down && j->mgr->hopefully_first_cnt == 0) { job_log(j, LOG_DEBUG, "Exited while shutdown in progress. Processes remaining: %lu/%lu", total_children, total_anon_children); return true; } else if (j->legacy_mach_job) { -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080304/2fe92eb4/attachment.html From source_changes at macosforge.org Tue Mar 4 09:48:59 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 4 Mar 2008 09:48:59 -0800 (PST) Subject: [launchd-changes] [23529] trunk/launchd/src/launchd_core_logic.c Message-ID: <20080304174859.8B2B3145B6CA@beta.macosforge.org> Revision: 23529 http://trac.macosforge.org/projects/launchd/changeset/23529 Author: zarzycki at apple.com Date: 2008-03-04 09:48:58 -0800 (Tue, 04 Mar 2008) Log Message: ----------- HopefullyExitsFirst jobs can't start OnDemand jobs Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-04 17:48:07 UTC (rev 23528) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-04 17:48:58 UTC (rev 23529) @@ -4003,7 +4003,7 @@ } else if (j->removal_pending) { job_log(j, LOG_DEBUG, "Exited while removal was pending."); return true; - } else if (j->mgr->shutting_down) { + } else if (j->mgr->shutting_down && j->mgr->hopefully_first_cnt == 0) { job_log(j, LOG_DEBUG, "Exited while shutdown in progress. Processes remaining: %lu/%lu", total_children, total_anon_children); return true; } else if (j->legacy_mach_job) { -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080304/532f8fc3/attachment.html From source_changes at macosforge.org Tue Mar 4 09:53:18 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 4 Mar 2008 09:53:18 -0800 (PST) Subject: [launchd-changes] [23530] trunk/launchd/src Message-ID: <20080304175318.1E8E3145B71C@beta.macosforge.org> Revision: 23530 http://trac.macosforge.org/projects/launchd/changeset/23530 Author: zarzycki at apple.com Date: 2008-03-04 09:53:17 -0800 (Tue, 04 Mar 2008) Log Message: ----------- More flexible is_apple_internal() check [10A14 vs. 10A12: 3-4 sec boot time regression (launchd)] Modified Paths: -------------- trunk/launchd/src/launchctl.c trunk/launchd/src/launchd_runtime.c Modified: trunk/launchd/src/launchctl.c =================================================================== --- trunk/launchd/src/launchctl.c 2008-03-04 17:48:58 UTC (rev 23529) +++ trunk/launchd/src/launchctl.c 2008-03-04 17:53:17 UTC (rev 23530) @@ -3190,7 +3190,7 @@ { struct stat sb; - if (stat("/AppleInternal", &sb) == 0) { + if (stat("/AppleInternal", &sb) == 0 && stat("/var/db/disableAppleInternal", &sb) == -1) { do_apple_internal_magic = true; } } Modified: trunk/launchd/src/launchd_runtime.c =================================================================== --- trunk/launchd/src/launchd_runtime.c 2008-03-04 17:48:58 UTC (rev 23529) +++ trunk/launchd/src/launchd_runtime.c 2008-03-04 17:53:17 UTC (rev 23530) @@ -1647,7 +1647,7 @@ pid1_magic = true; } - if (stat("/AppleInternal", &sb) != -1) { + if (stat("/AppleInternal", &sb) == 0 && stat("/var/db/disableAppleInternal", &sb) == -1) { do_apple_internal_logging = true; } } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080304/8d7be035/attachment.html From source_changes at macosforge.org Tue Mar 4 09:55:45 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 4 Mar 2008 09:55:45 -0800 (PST) Subject: [launchd-changes] [23531] trunk/launchd/src/launchd.plist.5 Message-ID: <20080304175545.E3320145B76F@beta.macosforge.org> Revision: 23531 http://trac.macosforge.org/projects/launchd/changeset/23531 Author: zarzycki at apple.com Date: 2008-03-04 09:55:45 -0800 (Tue, 04 Mar 2008) Log Message: ----------- DOC: launchd.plist(5) "Please note." awkward sentence. Modified Paths: -------------- trunk/launchd/src/launchd.plist.5 Modified: trunk/launchd/src/launchd.plist.5 =================================================================== --- trunk/launchd/src/launchd.plist.5 2008-03-04 17:53:17 UTC (rev 23530) +++ trunk/launchd/src/launchd.plist.5 2008-03-04 17:55:45 UTC (rev 23531) @@ -78,7 +78,7 @@ The follow keys can be used to describe the configuration details of your daemon or agent. Property lists are Apple's standard configuration file format. Please see .Xr plist 5 -for more information. Please note. Property list files are expected to have their name end in ".plist". +for more information. Please note: property list files are expected to have their name end in ".plist". .Pp .Bl -ohang .It Sy Label @@ -114,7 +114,7 @@ .It Sy ProgramArguments This key maps to the second argument of .Xr execvp 3 . -This key is required in the absence of the Program key. Please note! Many people are confused by this key. Please read +This key is required in the absence of the Program key. Please note: many people are confused by this key. Please read .Xr execvp 3 very carefully! .It Sy EnableGlobbing -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080304/79545919/attachment-0001.html From source_changes at macosforge.org Tue Mar 4 09:57:06 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 4 Mar 2008 09:57:06 -0800 (PST) Subject: [launchd-changes] [23532] trunk/launchd/src/launchd.plist.5 Message-ID: <20080304175706.411B8145B7A2@beta.macosforge.org> Revision: 23532 http://trac.macosforge.org/projects/launchd/changeset/23532 Author: zarzycki at apple.com Date: 2008-03-04 09:57:05 -0800 (Tue, 04 Mar 2008) Log Message: ----------- Spelling error in man launchd.plist Modified Paths: -------------- trunk/launchd/src/launchd.plist.5 Modified: trunk/launchd/src/launchd.plist.5 =================================================================== --- trunk/launchd/src/launchd.plist.5 2008-03-04 17:55:45 UTC (rev 23531) +++ trunk/launchd/src/launchd.plist.5 2008-03-04 17:57:05 UTC (rev 23532) @@ -75,7 +75,7 @@ Catch the SIGTERM signal. .El .Sh XML PROPERTY LIST KEYS -The follow keys can be used to describe the configuration details of your daemon or agent. +The following keys can be used to describe the configuration details of your daemon or agent. Property lists are Apple's standard configuration file format. Please see .Xr plist 5 for more information. Please note: property list files are expected to have their name end in ".plist". -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080304/c42c1a90/attachment.html From source_changes at macosforge.org Tue Mar 4 10:40:04 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 4 Mar 2008 10:40:04 -0800 (PST) Subject: [launchd-changes] [23533] trunk/launchd/src Message-ID: <20080304184004.5ADA9145BA4E@beta.macosforge.org> Revision: 23533 http://trac.macosforge.org/projects/launchd/changeset/23533 Author: zarzycki at apple.com Date: 2008-03-04 10:40:03 -0800 (Tue, 04 Mar 2008) Log Message: ----------- ER: Enable "please clean up all my child processes" bit Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/libvproc_private.h Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-04 17:57:05 UTC (rev 23532) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-04 18:40:03 UTC (rev 23533) @@ -5594,6 +5594,9 @@ job_log(j, LOG_DEBUG, "%s key: %u", action, inkey ? inkey : outkey); switch (outkey) { + case VPROC_GSK_ABANDON_PROCESS_GROUP: + *outval = j->abandon_pg; + break; case VPROC_GSK_LAST_EXIT_STATUS: *outval = j->last_exit_status; break; @@ -5637,6 +5640,9 @@ } switch (inkey) { + case VPROC_GSK_ABANDON_PROCESS_GROUP: + j->abandon_pg = (bool)inval; + break; case VPROC_GSK_GLOBAL_ON_DEMAND: kr = job_set_global_on_demand(j, (bool)inval) ? 0 : 1; break; Modified: trunk/launchd/src/libvproc_private.h =================================================================== --- trunk/launchd/src/libvproc_private.h 2008-03-04 17:57:05 UTC (rev 23532) +++ trunk/launchd/src/libvproc_private.h 2008-03-04 18:40:03 UTC (rev 23533) @@ -48,6 +48,7 @@ VPROC_GSK_ALLJOBS, VPROC_GSK_GLOBAL_LOG_MASK, VPROC_GSK_GLOBAL_UMASK, + VPROC_GSK_ABANDON_PROCESS_GROUP, } vproc_gsk_t; vproc_err_t vproc_swap_integer(vproc_t vp, vproc_gsk_t key, int64_t *inval, int64_t *outval); -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080304/30ee4db5/attachment.html From source_changes at macosforge.org Tue Mar 4 13:50:35 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 4 Mar 2008 13:50:35 -0800 (PST) Subject: [launchd-changes] [23534] tags/launchd-261/ Message-ID: <20080304215035.7D3E5145C88F@beta.macosforge.org> Revision: 23534 http://trac.macosforge.org/projects/launchd/changeset/23534 Author: zarzycki at apple.com Date: 2008-03-04 13:50:35 -0800 (Tue, 04 Mar 2008) Log Message: ----------- "Tagging launchd-261 from https://svn.macosforge.org/repository/launchd/trunk" Added Paths: ----------- tags/launchd-261/ Copied: tags/launchd-261 (from rev 23533, trunk) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080304/73c077ec/attachment.html From source_changes at macosforge.org Wed Mar 5 18:16:38 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 5 Mar 2008 18:16:38 -0800 (PST) Subject: [launchd-changes] [23535] trunk/launchd/src Message-ID: <20080306021638.A0B97146C4AD@beta.macosforge.org> Revision: 23535 http://trac.macosforge.org/projects/launchd/changeset/23535 Author: zarzycki at apple.com Date: 2008-03-05 18:16:37 -0800 (Wed, 05 Mar 2008) Log Message: ----------- Deprecate bootstrap_create_service() in favor of bootstrap_check_in() Modified Paths: -------------- trunk/launchd/src/launchctl.c trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/launchd_runtime.c trunk/launchd/src/libbootstrap.c trunk/launchd/src/libbootstrap_public.h trunk/launchd/src/libvproc_public.h trunk/launchd/src/protocol_job.defs Modified: trunk/launchd/src/launchctl.c =================================================================== --- trunk/launchd/src/launchctl.c 2008-03-04 21:50:35 UTC (rev 23534) +++ trunk/launchd/src/launchctl.c 2008-03-06 02:16:37 UTC (rev 23535) @@ -1794,9 +1794,9 @@ fprintf(stderr, "%s: bootstrap_create_server(): %d\n", getprogname(), kr); continue; } - if ((kr = bootstrap_create_service(msr, (char*)sn, &msv)) != KERN_SUCCESS) { + if ((kr = bootstrap_check_in(msr, (char*)sn, &msv)) != KERN_SUCCESS) { fprintf(stderr, "%s: bootstrap_create_service(): %d\n", getprogname(), kr); - mach_port_destroy(mach_task_self(), msr); + mach_port_mod_refs(mach_task_self(), msv, MACH_PORT_RIGHT_RECEIVE, -1); continue; } launch_data_dict_insert(oai, launch_data_new_machport(msr), MACHINIT_JOBKEY_SERVERPORT); Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-04 21:50:35 UTC (rev 23534) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-06 02:16:37 UTC (rev 23535) @@ -425,7 +425,6 @@ static job_t job_new_anonymous(jobmgr_t jm, pid_t anonpid) __attribute__((malloc, nonnull, warn_unused_result)); static job_t job_new(jobmgr_t jm, const char *label, const char *prog, const char *const *argv) __attribute__((malloc, nonnull(1,2), warn_unused_result)); static job_t job_new_via_mach_init(job_t j, const char *cmd, uid_t uid, bool ond) __attribute__((malloc, nonnull, warn_unused_result)); -static const char *job_prog(job_t j); static void job_kill(job_t j); static void job_uncork_fork(job_t j); static void job_log_stdouterr(job_t j); @@ -4133,18 +4132,6 @@ } const char * -job_prog(job_t j) -{ - if (j->prog) { - return j->prog; - } else if (likely(j->argv)) { - return j->argv[0]; - } else { - return ""; - } -} - -const char * job_active(job_t j) { struct machservice *ms; @@ -5926,9 +5913,15 @@ ms = jobmgr_lookup_service(j->mgr, servicename, true, 0); - if (unlikely(ms == NULL)) { - job_log(j, LOG_DEBUG, "Check-in of Mach service failed. Unknown: %s", servicename); - return BOOTSTRAP_UNKNOWN_SERVICE; + if (ms == NULL) { + *serviceportp = MACH_PORT_NULL; + ms = machservice_new(j, servicename, serviceportp, false); + + if (unlikely(ms == NULL)) { + return BOOTSTRAP_NO_MEMORY; + } + + job_checkin(j); } if (unlikely((jo = machservice_job(ms)) != j)) { @@ -6575,43 +6568,6 @@ } kern_return_t -job_mig_create_service(job_t j, name_t servicename, mach_port_t *serviceportp) -{ - struct machservice *ms; - - if (!launchd_assumes(j != NULL)) { - return BOOTSTRAP_NO_MEMORY; - } - - if (unlikely(job_prog(j)[0] == '\0')) { - job_log(j, LOG_ERR, "Mach service creation requires a target server: %s", servicename); - return BOOTSTRAP_NOT_PRIVILEGED; - } - - if (unlikely(!j->legacy_mach_job)) { - job_log(j, LOG_ERR, "bootstrap_create_service() is only allowed against legacy Mach jobs: %s", servicename); - return BOOTSTRAP_NOT_PRIVILEGED; - } - - ms = jobmgr_lookup_service(j->mgr, servicename, false, 0); - if (unlikely(ms)) { - job_log(j, LOG_DEBUG, "Mach service creation attempt for failed. Already exists: %s", servicename); - return BOOTSTRAP_NAME_IN_USE; - } - - job_checkin(j); - - *serviceportp = MACH_PORT_NULL; - ms = machservice_new(j, servicename, serviceportp, false); - - if (!job_assumes(j, ms != NULL)) { - return BOOTSTRAP_NO_MEMORY; - } - - return BOOTSTRAP_SUCCESS; -} - -kern_return_t job_mig_embedded_wait(job_t j, name_t targetlabel, integer_t *waitstatus) { job_t otherj; Modified: trunk/launchd/src/launchd_runtime.c =================================================================== --- trunk/launchd/src/launchd_runtime.c 2008-03-04 21:50:35 UTC (rev 23534) +++ trunk/launchd/src/launchd_runtime.c 2008-03-06 02:16:37 UTC (rev 23535) @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999-2006 Apple Computer, Inc. All rights reserved. + * Copyright (c) 1999-2008 Apple Computer, Inc. All rights reserved. * * @APPLE_APACHE_LICENSE_HEADER_START@ * Modified: trunk/launchd/src/libbootstrap.c =================================================================== --- trunk/launchd/src/libbootstrap.c 2008-03-04 21:50:35 UTC (rev 23534) +++ trunk/launchd/src/libbootstrap.c 2008-03-06 02:16:37 UTC (rev 23535) @@ -100,7 +100,17 @@ kern_return_t bootstrap_create_service(mach_port_t bp, name_t service_name, mach_port_t *sp) { - return vproc_mig_create_service(bp, service_name, sp); + kern_return_t kr; + + if ((kr = bootstrap_check_in(bp, service_name, sp))) { + return kr; + } + + if ((kr = mach_port_mod_refs(mach_task_self(), *sp, MACH_PORT_RIGHT_RECEIVE, -1))) { + return kr; + } + + return bootstrap_look_up(bp, service_name, sp); } kern_return_t @@ -160,19 +170,22 @@ kern_return_t bootstrap_status(mach_port_t bp, name_t service_name, bootstrap_status_t *service_active) { + kern_return_t kr; mach_port_t p; + if ((kr = bootstrap_look_up(bp, service_name, &p))) { + return kr; + } + + mach_port_deallocate(mach_task_self(), p); + *service_active = BOOTSTRAP_STATUS_ACTIVE; + if (bootstrap_check_in(bp, service_name, &p) == BOOTSTRAP_SUCCESS) { mach_port_mod_refs(mach_task_self(), p, MACH_PORT_RIGHT_RECEIVE, -1); *service_active = BOOTSTRAP_STATUS_ON_DEMAND; - return BOOTSTRAP_SUCCESS; - } else if (bootstrap_look_up(bp, service_name, &p) == BOOTSTRAP_SUCCESS) { - mach_port_deallocate(mach_task_self(), p); - *service_active = BOOTSTRAP_STATUS_ACTIVE; - return BOOTSTRAP_SUCCESS; } - return BOOTSTRAP_UNKNOWN_SERVICE; + return BOOTSTRAP_SUCCESS; } kern_return_t Modified: trunk/launchd/src/libbootstrap_public.h =================================================================== --- trunk/launchd/src/libbootstrap_public.h 2008-03-04 21:50:35 UTC (rev 23534) +++ trunk/launchd/src/libbootstrap_public.h 2008-03-06 02:16:37 UTC (rev 23535) @@ -233,13 +233,16 @@ * * This API is deprecated. Old scenarios and recommendations: * - * 1) If the code was registering a well known name, please switch to launchd. + * 1) Code that used to call bootstrap_check_in() and then bootstrap_register() + * can now always call bootstrap_check_in(). * - * 2) If the code was registering a dynamically generated string and passing + * 2) If the code was registering a well known name, please switch to launchd. + * + * 3) If the code was registering a dynamically generated string and passing * the string to other applications, please rewrite the code to send a Mach * send-right directly. * - * 3) If the launchd job maintained an optional Mach service, please reserve + * 4) If the launchd job maintained an optional Mach service, please reserve * the name with launchd and control the presense of the service through * ownership of the Mach receive right like so. * @@ -261,26 +264,27 @@ * Returns BOOTSTRAP_NAME_IN_USE, if service has already been * register or checked-in. */ -kern_return_t bootstrap_register( - mach_port_t bp, - name_t service_name, - mach_port_t sp) - AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5; +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5 +kern_return_t +bootstrap_register(mach_port_t bp, name_t service_name, mach_port_t sp); /* * bootstrap_create_service() * - * Creates a service named "service_name" and returns send rights to that + * Creates a service named "service_name" and returns a send right to that * port in "service_port." The port may later be checked in as if this * port were configured in the bootstrap configuration file. * + * This API is deprecated. Please call bootstrap_check_in() instead. + * * Errors: Returns appropriate kernel errors on rpc failure. * Returns BOOTSTRAP_SERVICE_ACTIVE, if service already exists. */ -kern_return_t bootstrap_create_service( - mach_port_t bp, - name_t service_name, - mach_port_t *sp); +#ifdef AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_6 +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_6 +#endif +kern_return_t +bootstrap_create_service(mach_port_t bp, name_t service_name, mach_port_t *sp); /* * bootstrap_check_in() Modified: trunk/launchd/src/libvproc_public.h =================================================================== --- trunk/launchd/src/libvproc_public.h 2008-03-04 21:50:35 UTC (rev 23534) +++ trunk/launchd/src/libvproc_public.h 2008-03-06 02:16:37 UTC (rev 23535) @@ -94,7 +94,7 @@ /*! * @function vproc_transaction_complete * - * @param + * @param handle * The handle previously created with vproc_transaction_prepare(). * * @abstract @@ -130,7 +130,7 @@ /*! * @function vproc_standby_complete * - * @param + * @param handle * The handle previously created with vproc_standby_prepare(). * * @abstract Modified: trunk/launchd/src/protocol_job.defs =================================================================== --- trunk/launchd/src/protocol_job.defs 2008-03-04 21:50:35 UTC (rev 23534) +++ trunk/launchd/src/protocol_job.defs 2008-03-06 02:16:37 UTC (rev 23535) @@ -94,10 +94,7 @@ __requestor_port: mach_port_t; out __subset_port : mach_port_make_send_t); -routine create_service( - __bs_port : job_t; - __service_name : name_t; - out __service_port : mach_port_t); +skip; /* create_service prior to 10.6 */ routine take_subset( __bs_port : job_t; -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080305/28e1af55/attachment-0001.html From source_changes at macosforge.org Wed Mar 5 18:31:33 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 5 Mar 2008 18:31:33 -0800 (PST) Subject: [launchd-changes] [23536] trunk/launchd/src Message-ID: <20080306023133.53F80146C9E3@beta.macosforge.org> Revision: 23536 http://trac.macosforge.org/projects/launchd/changeset/23536 Author: zarzycki at apple.com Date: 2008-03-05 18:31:32 -0800 (Wed, 05 Mar 2008) Log Message: ----------- launchd should use getfsstat64() Modified Paths: -------------- trunk/launchd/src/Makefile.am trunk/launchd/src/Makefile.in Modified: trunk/launchd/src/Makefile.am =================================================================== --- trunk/launchd/src/Makefile.am 2008-03-06 02:16:37 UTC (rev 23535) +++ trunk/launchd/src/Makefile.am 2008-03-06 02:31:32 UTC (rev 23536) @@ -1,6 +1,6 @@ CWARN = -Wall -Wextra -Waggregate-return -Wfloat-equal -Wshadow -Wpacked -Wmissing-prototypes -Wmissing-declarations -Werror # gcc4.2: -Wstrict-overflow=4 # -Wpadded -Wconversion -Wstrict-aliasing=2 CTUNE = -fvisibility=hidden # gcc4.2: -fdiagnostics-show-option # -fstrict-aliasing -CMISC = -isysroot $(SDKROOT) -F$(SDKROOT)/System/Library/PrivateFrameworks -D__MigTypeCheck=1 -Dmig_external=__private_extern__ +CMISC = -isysroot $(SDKROOT) -F$(SDKROOT)/System/Library/PrivateFrameworks -D__MigTypeCheck=1 -Dmig_external=__private_extern__ -D_DARWIN_USE_64_BIT_INODE=1 AM_CFLAGS = $(CTUNE) $(CMISC) $(CWARN) AM_LDFLAGS = -Wl,-syslibroot,$(SDKROOT) Modified: trunk/launchd/src/Makefile.in =================================================================== --- trunk/launchd/src/Makefile.in 2008-03-06 02:16:37 UTC (rev 23535) +++ trunk/launchd/src/Makefile.in 2008-03-06 02:31:32 UTC (rev 23536) @@ -244,7 +244,7 @@ top_srcdir = @top_srcdir@ CWARN = -Wall -Wextra -Waggregate-return -Wfloat-equal -Wshadow -Wpacked -Wmissing-prototypes -Wmissing-declarations -Werror # gcc4.2: -Wstrict-overflow=4 # -Wpadded -Wconversion -Wstrict-aliasing=2 CTUNE = -fvisibility=hidden # gcc4.2: -fdiagnostics-show-option # -fstrict-aliasing -CMISC = -isysroot $(SDKROOT) -F$(SDKROOT)/System/Library/PrivateFrameworks -D__MigTypeCheck=1 -Dmig_external=__private_extern__ +CMISC = -isysroot $(SDKROOT) -F$(SDKROOT)/System/Library/PrivateFrameworks -D__MigTypeCheck=1 -Dmig_external=__private_extern__ -D_DARWIN_USE_64_BIT_INODE=1 AM_CFLAGS = $(CTUNE) $(CMISC) $(CWARN) AM_LDFLAGS = -Wl,-syslibroot,$(SDKROOT) CLEANFILES = protocol_vproc.h protocol_vprocServer.c protocol_vprocUser.c protocol_vprocServer.h \ -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080305/6d8a14ea/attachment.html From source_changes at macosforge.org Wed Mar 5 18:32:06 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 5 Mar 2008 18:32:06 -0800 (PST) Subject: [launchd-changes] [23537] trunk/launchd/src/launchd_core_logic.c Message-ID: <20080306023206.0A521146CA4D@beta.macosforge.org> Revision: 23537 http://trac.macosforge.org/projects/launchd/changeset/23537 Author: zarzycki at apple.com Date: 2008-03-05 18:32:05 -0800 (Wed, 05 Mar 2008) Log Message: ----------- A small nagging reminder. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-06 02:31:32 UTC (rev 23536) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-06 02:32:05 UTC (rev 23537) @@ -5922,6 +5922,10 @@ } job_checkin(j); + + if (!(j->anonymous || j->legacy_LS_job || j->legacy_mach_job)) { + job_log(j, LOG_NOTICE, "Please add the following service to the configuration file for this job: %s", servicename); + } } if (unlikely((jo = machservice_job(ms)) != j)) { -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080305/974d5e9a/attachment.html From source_changes at macosforge.org Thu Mar 6 10:46:35 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Thu, 6 Mar 2008 10:46:35 -0800 (PST) Subject: [launchd-changes] [23538] trunk/launchd/src/launchd_core_logic.c Message-ID: <20080306184635.C44BB1471CE3@beta.macosforge.org> Revision: 23538 http://trac.macosforge.org/projects/launchd/changeset/23538 Author: zarzycki at apple.com Date: 2008-03-06 10:46:35 -0800 (Thu, 06 Mar 2008) Log Message: ----------- Change launchd to trigger SpinTracer when terminated processes take too long to terminate Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-06 02:32:05 UTC (rev 23537) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-06 18:46:35 UTC (rev 23538) @@ -99,7 +99,7 @@ #include "job_forward.h" #define LAUNCHD_MIN_JOB_RUN_TIME 10 -#define LAUNCHD_DEFAULT_EXIT_TIMEOUT 20 +#define LAUNCHD_DEFAULT_EXIT_TIMEOUT 2 #define LAUNCHD_SIGKILL_TIMER 5 #define SHUTDOWN_LOG_DIR "/var/log/shutdown" -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080306/66245782/attachment.html From source_changes at macosforge.org Thu Mar 6 11:00:19 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Thu, 6 Mar 2008 11:00:19 -0800 (PST) Subject: [launchd-changes] [23539] trunk/launchd/src Message-ID: <20080306190019.0C1301471E52@beta.macosforge.org> Revision: 23539 http://trac.macosforge.org/projects/launchd/changeset/23539 Author: zarzycki at apple.com Date: 2008-03-06 11:00:19 -0800 (Thu, 06 Mar 2008) Log Message: ----------- Refinements on: Deprecate bootstrap_create_service() in favor of bootstrap_check_in() Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/libbootstrap.c trunk/launchd/src/libbootstrap_private.h trunk/launchd/src/protocol_job.defs Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-06 18:46:35 UTC (rev 23538) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-06 19:00:19 UTC (rev 23539) @@ -140,8 +140,9 @@ job_t job; unsigned int gen_num; mach_port_name_t port; - unsigned int isActive:1, reset:1, recv:1, hide:1, kUNCServer:1, - per_user_hack:1, debug_on_close:1, per_pid:1, special_port_num:24; + unsigned int isActive:1, reset:1, recv:1, hide:1, + kUNCServer:1, per_user_hack:1, debug_on_close:1, per_pid:1, + delete_on_destruction:1, special_port_num:23; const char name[0]; }; @@ -4888,6 +4889,7 @@ job_ack_port_destruction(mach_port_t p) { struct machservice *ms; + job_t j; LIST_FOREACH(ms, &port_hash[HASH_PORT(p)], port_hash_sle) { if (ms->recv && (ms->port == p)) { @@ -4895,18 +4897,23 @@ } } - if (!ms) { + if (!jobmgr_assumes(root_jobmgr, ms != NULL)) { return false; } + j = ms->job; + + job_log(j, LOG_DEBUG, "Receive right returned to us: %s", ms->name); + ms->isActive = false; - if (ms->reset) { - machservice_resetport(ms->job, ms); + if (ms->delete_on_destruction) { + machservice_delete(j, ms, false); + } else if (ms->reset) { + machservice_resetport(j, ms); } - job_log(ms->job, LOG_DEBUG, "Receive right returned to us: %s", ms->name); - job_dispatch(ms->job, false); + job_dispatch(j, false); root_jobmgr = jobmgr_do_garbage_collection(root_jobmgr); @@ -5901,26 +5908,27 @@ } kern_return_t -job_mig_check_in(job_t j, name_t servicename, mach_port_t *serviceportp) +job_mig_check_in2(job_t j, name_t servicename, mach_port_t *serviceportp, uint64_t flags) { + bool per_pid_service = flags & BOOTSTRAP_PER_PID_SERVICE; + struct ldcred *ldc = runtime_get_caller_creds(); struct machservice *ms; - struct ldcred *ldc = runtime_get_caller_creds(); job_t jo; if (!launchd_assumes(j != NULL)) { return BOOTSTRAP_NO_MEMORY; } - ms = jobmgr_lookup_service(j->mgr, servicename, true, 0); + ms = jobmgr_lookup_service(j->mgr, servicename, false, per_pid_service ? ldc->pid : 0); if (ms == NULL) { *serviceportp = MACH_PORT_NULL; - ms = machservice_new(j, servicename, serviceportp, false); - if (unlikely(ms == NULL)) { + if (unlikely((ms = machservice_new(j, servicename, serviceportp, per_pid_service)) == NULL)) { return BOOTSTRAP_NO_MEMORY; } + ms->delete_on_destruction = true; /* parity with bootstrap_register() */ job_checkin(j); if (!(j->anonymous || j->legacy_LS_job || j->legacy_mach_job)) { Modified: trunk/launchd/src/libbootstrap.c =================================================================== --- trunk/launchd/src/libbootstrap.c 2008-03-06 18:46:35 UTC (rev 23538) +++ trunk/launchd/src/libbootstrap.c 2008-03-06 19:00:19 UTC (rev 23539) @@ -116,10 +116,16 @@ kern_return_t bootstrap_check_in(mach_port_t bp, name_t service_name, mach_port_t *sp) { - return vproc_mig_check_in(bp, service_name, sp); + return vproc_mig_check_in2(bp, service_name, sp, 0); } kern_return_t +bootstrap_check_in2(mach_port_t bp, name_t service_name, mach_port_t *sp, uint64_t flags) +{ + return vproc_mig_check_in2(bp, service_name, sp, flags); +} + +kern_return_t bootstrap_look_up_per_user(mach_port_t bp, name_t service_name, uid_t target_user, mach_port_t *sp) { struct stat sb; Modified: trunk/launchd/src/libbootstrap_private.h =================================================================== --- trunk/launchd/src/libbootstrap_private.h 2008-03-06 18:46:35 UTC (rev 23538) +++ trunk/launchd/src/libbootstrap_private.h 2008-03-06 19:00:19 UTC (rev 23539) @@ -35,6 +35,8 @@ kern_return_t bootstrap_look_up2(mach_port_t bp, name_t service_name, mach_port_t *sp, pid_t target_pid, uint64_t flags); +kern_return_t bootstrap_check_in2(mach_port_t bp, name_t service_name, mach_port_t *sp, uint64_t flags); + kern_return_t bootstrap_look_up_per_user(mach_port_t bp, name_t service_name, uid_t target_user, mach_port_t *sp); kern_return_t bootstrap_set_policy(mach_port_t bp, pid_t target_pid, uint64_t flags, const char *target_service); Modified: trunk/launchd/src/protocol_job.defs =================================================================== --- trunk/launchd/src/protocol_job.defs 2008-03-06 18:46:35 UTC (rev 23538) +++ trunk/launchd/src/protocol_job.defs 2008-03-06 19:00:19 UTC (rev 23539) @@ -50,10 +50,11 @@ __bs_port : job_t; __flags : uint64_t); -routine check_in( - __bs_port : job_t; - __service_name : name_t; - out __service_port : mach_port_move_receive_t); +routine check_in2( + __bs_port : job_t; + __service_name : name_t; + out __service_port : mach_port_move_receive_t; + __flags : uint64_t); routine register2( __bs_port : job_t; -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080306/d369670d/attachment-0001.html From source_changes at macosforge.org Thu Mar 6 14:15:47 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Thu, 6 Mar 2008 14:15:47 -0800 (PST) Subject: [launchd-changes] [23540] trunk/launchd/src/launchd_core_logic.c Message-ID: <20080306221547.B45271472BA5@beta.macosforge.org> Revision: 23540 http://trac.macosforge.org/projects/launchd/changeset/23540 Author: zarzycki at apple.com Date: 2008-03-06 14:15:46 -0800 (Thu, 06 Mar 2008) Log Message: ----------- Last change for now with respect to: Deprecate bootstrap_create_service() in favor of bootstrap_check_in() Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-06 19:00:19 UTC (rev 23539) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-06 22:15:46 UTC (rev 23540) @@ -5928,7 +5928,7 @@ return BOOTSTRAP_NO_MEMORY; } - ms->delete_on_destruction = true; /* parity with bootstrap_register() */ + ms->delete_on_destruction = !j->legacy_mach_job; job_checkin(j); if (!(j->anonymous || j->legacy_LS_job || j->legacy_mach_job)) { -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080306/5ba2bc69/attachment.html From source_changes at macosforge.org Thu Mar 6 14:15:56 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Thu, 6 Mar 2008 14:15:56 -0800 (PST) Subject: [launchd-changes] [23541] tags/launchd-262/ Message-ID: <20080306221556.C0E4A1472BC6@beta.macosforge.org> Revision: 23541 http://trac.macosforge.org/projects/launchd/changeset/23541 Author: zarzycki at apple.com Date: 2008-03-06 14:15:56 -0800 (Thu, 06 Mar 2008) Log Message: ----------- "Tagging launchd-262 from https://svn.macosforge.org/repository/launchd/trunk" Added Paths: ----------- tags/launchd-262/ Copied: tags/launchd-262 (from rev 23540, trunk) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080306/17654271/attachment.html From source_changes at macosforge.org Thu Mar 6 16:20:28 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Thu, 6 Mar 2008 16:20:28 -0800 (PST) Subject: [launchd-changes] [23542] trunk/launchd/src Message-ID: <20080307002028.3B70514736AE@beta.macosforge.org> Revision: 23542 http://trac.macosforge.org/projects/launchd/changeset/23542 Author: zarzycki at apple.com Date: 2008-03-06 16:20:27 -0800 (Thu, 06 Mar 2008) Log Message: ----------- Misc. Modified Paths: -------------- trunk/launchd/src/launchd.c trunk/launchd/src/launchd_runtime.c trunk/launchd/src/launchd_runtime.h trunk/launchd/src/liblaunch.c Modified: trunk/launchd/src/launchd.c =================================================================== --- trunk/launchd/src/launchd.c 2008-03-06 22:15:56 UTC (rev 23541) +++ trunk/launchd/src/launchd.c 2008-03-07 00:20:27 UTC (rev 23542) @@ -106,12 +106,13 @@ int main(int argc, char *const *argv) { + const char *stdouterr_path = low_level_debug ? _PATH_CONSOLE : _PATH_DEVNULL; bool sflag = false; int ch; testfd_or_openfd(STDIN_FILENO, _PATH_DEVNULL, O_RDONLY); - testfd_or_openfd(STDOUT_FILENO, _PATH_DEVNULL, O_WRONLY); - testfd_or_openfd(STDERR_FILENO, _PATH_DEVNULL, O_WRONLY); + testfd_or_openfd(STDOUT_FILENO, stdouterr_path, O_WRONLY); + testfd_or_openfd(STDERR_FILENO, stdouterr_path, O_WRONLY); while ((ch = getopt(argc, argv, "s")) != -1) { switch (ch) { Modified: trunk/launchd/src/launchd_runtime.c =================================================================== --- trunk/launchd/src/launchd_runtime.c 2008-03-06 22:15:56 UTC (rev 23541) +++ trunk/launchd/src/launchd_runtime.c 2008-03-07 00:20:27 UTC (rev 23542) @@ -124,6 +124,7 @@ static FILE *ourlogfile; bool pid1_magic; bool do_apple_internal_logging; +bool low_level_debug; INTERNAL_ABI mach_port_t @@ -135,7 +136,6 @@ // static const char *__crashreporter_info__ = ""; static int internal_mask_pri = LOG_UPTO(LOG_NOTICE); -//static int internal_mask_pri = LOG_UPTO(LOG_DEBUG); INTERNAL_ABI void @@ -1205,6 +1205,12 @@ } vsnprintf(newmsg, sizeof(newmsg), message, args); + + if (unlikely(low_level_debug)) { + fprintf(stderr, "%s %u\t%s %u\t%s\n", attr->from_name, attr->from_pid, + attr->about_name, attr->about_pid, newmsg); + } + logmsg_add(attr, saved_errno, newmsg); } @@ -1650,4 +1656,9 @@ if (stat("/AppleInternal", &sb) == 0 && stat("/var/db/disableAppleInternal", &sb) == -1) { do_apple_internal_logging = true; } + + if (stat("/var/db/.debug_launchd", &sb) == 0) { + internal_mask_pri = LOG_UPTO(LOG_DEBUG); + low_level_debug = true; + } } Modified: trunk/launchd/src/launchd_runtime.h =================================================================== --- trunk/launchd/src/launchd_runtime.h 2008-03-06 22:15:56 UTC (rev 23541) +++ trunk/launchd/src/launchd_runtime.h 2008-03-07 00:20:27 UTC (rev 23542) @@ -105,6 +105,7 @@ extern bool pid1_magic; extern bool do_apple_internal_logging; +extern bool low_level_debug; INTERNAL_ABI mach_port_t runtime_get_kernel_port(void); Modified: trunk/launchd/src/liblaunch.c =================================================================== --- trunk/launchd/src/liblaunch.c 2008-03-06 22:15:56 UTC (rev 23541) +++ trunk/launchd/src/liblaunch.c 2008-03-07 00:20:27 UTC (rev 23542) @@ -732,7 +732,8 @@ return r; } -int launchd_msg_send(launch_t lh, launch_data_t d) +int +launchd_msg_send(launch_t lh, launch_data_t d) { struct launch_msg_header lmh; struct cmsghdr *cm = NULL; @@ -948,7 +949,8 @@ return resp; } -int launchd_msg_recv(launch_t lh, void (*cb)(launch_data_t, void *), void *context) +int +launchd_msg_recv(launch_t lh, void (*cb)(launch_data_t, void *), void *context) { struct cmsghdr *cm = alloca(4096); launch_data_t rmsg = NULL; @@ -1039,7 +1041,8 @@ return -1; } -launch_data_t launch_data_copy(launch_data_t o) +launch_data_t +launch_data_copy(launch_data_t o) { launch_data_t r = launch_data_alloc(o->type); size_t i; @@ -1090,14 +1093,16 @@ return false; } -static int _fd(int fd) +int +_fd(int fd) { if (fd >= 0) fcntl(fd, F_SETFD, 1); return fd; } -launch_data_t launch_data_new_errno(int e) +launch_data_t +launch_data_new_errno(int e) { launch_data_t r = launch_data_alloc(LAUNCH_DATA_ERRNO); @@ -1107,7 +1112,8 @@ return r; } -launch_data_t launch_data_new_fd(int fd) +launch_data_t +launch_data_new_fd(int fd) { launch_data_t r = launch_data_alloc(LAUNCH_DATA_FD); @@ -1117,7 +1123,8 @@ return r; } -launch_data_t launch_data_new_machport(mach_port_t p) +launch_data_t +launch_data_new_machport(mach_port_t p) { launch_data_t r = launch_data_alloc(LAUNCH_DATA_MACHPORT); @@ -1127,7 +1134,8 @@ return r; } -launch_data_t launch_data_new_integer(long long n) +launch_data_t +launch_data_new_integer(long long n) { launch_data_t r = launch_data_alloc(LAUNCH_DATA_INTEGER); @@ -1137,7 +1145,8 @@ return r; } -launch_data_t launch_data_new_bool(bool b) +launch_data_t +launch_data_new_bool(bool b) { launch_data_t r = launch_data_alloc(LAUNCH_DATA_BOOL); @@ -1147,7 +1156,8 @@ return r; } -launch_data_t launch_data_new_real(double d) +launch_data_t +launch_data_new_real(double d) { launch_data_t r = launch_data_alloc(LAUNCH_DATA_REAL); @@ -1157,7 +1167,8 @@ return r; } -launch_data_t launch_data_new_string(const char *s) +launch_data_t +launch_data_new_string(const char *s) { launch_data_t r = launch_data_alloc(LAUNCH_DATA_STRING); @@ -1172,7 +1183,8 @@ return r; } -launch_data_t launch_data_new_opaque(const void *o, size_t os) +launch_data_t +launch_data_new_opaque(const void *o, size_t os) { launch_data_t r = launch_data_alloc(LAUNCH_DATA_OPAQUE); -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080306/85c43129/attachment-0001.html From source_changes at macosforge.org Mon Mar 10 13:49:08 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Mon, 10 Mar 2008 13:49:08 -0700 (PDT) Subject: [launchd-changes] [23543] trunk/launchd/src/launchd_core_logic.c Message-ID: <20080310204908.38E9C148F97C@beta.macosforge.org> Revision: 23543 http://trac.macosforge.org/projects/launchd/changeset/23543 Author: zarzycki at apple.com Date: 2008-03-10 13:49:07 -0700 (Mon, 10 Mar 2008) Log Message: ----------- dirname() is tricky Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-07 00:20:27 UTC (rev 23542) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-10 20:49:07 UTC (rev 23543) @@ -172,7 +172,10 @@ SLIST_ENTRY(socketgroup) sle; int *fds; unsigned int junkfds:1, fd_cnt:31; - char name[0]; + union { + const char name[0]; + char name_init[0]; + }; }; static bool socketgroup_new(job_t j, const char *name, int *fds, unsigned int fd_cnt, bool junkfds); @@ -204,7 +207,10 @@ struct envitem { SLIST_ENTRY(envitem) sle; char *value; - char key[0]; + union { + const char key[0]; + char key_init[0]; + }; }; static bool envitem_new(job_t j, const char *k, const char *v, bool global); @@ -244,7 +250,10 @@ SLIST_ENTRY(semaphoreitem) sle; semaphore_reason_t why; int fd; - char what[0]; + union { + const char what[0]; + char what_init[0]; + }; }; struct semaphoreitem_dict_iter_context { @@ -282,7 +291,10 @@ unsigned int hopefully_first_cnt; unsigned int normal_active_cnt; unsigned int sent_stop_to_normal_jobs:1, sent_stop_to_hopefully_last_jobs:1, shutting_down:1, session_initialized:1, __junk:28; - char name[0]; + union { + const char name[0]; + char name_init[0]; + }; }; #define jobmgr_assumes(jm, e) \ @@ -3499,11 +3511,10 @@ void semaphoreitem_watch(job_t j, struct semaphoreitem *si) { - char parentdir_path[PATH_MAX], *which_path = si->what; + char *parentdir, tmp_path[PATH_MAX]; + const char *which_path = si->what; int saved_errno = 0; int fflags = 0; - - strlcpy(parentdir_path, dirname(si->what), sizeof(parentdir_path)); switch (si->why) { case PATH_EXISTS: @@ -3520,11 +3531,18 @@ return; } + /* dirname() may modify tmp_path */ + strlcpy(tmp_path, si->what, sizeof(tmp_path)); + + if (!job_assumes(j, (parentdir = dirname(tmp_path)))) { + return; + } + /* See 5321044 for why we do the do-while loop and 5415523 for why ENOENT is checked */ do { if (si->fd == -1) { if ((si->fd = _fd(open(which_path, O_EVTONLY|O_NOCTTY))) == -1) { - which_path = parentdir_path; + which_path = parentdir; si->fd = _fd(open(which_path, O_EVTONLY|O_NOCTTY)); } } @@ -3765,7 +3783,7 @@ } memcpy(sg->fds, fds, fd_cnt * sizeof(int)); - strcpy(sg->name, name); + strcpy(sg->name_init, name); SLIST_INSERT_HEAD(&j->sockets, sg, sle); @@ -3857,8 +3875,8 @@ return false; } - strcpy(ei->key, k); - ei->value = ei->key + strlen(k) + 1; + strcpy(ei->key_init, k); + ei->value = ei->key_init + strlen(k) + 1; strcpy(ei->value, v); if (global) { @@ -4555,7 +4573,7 @@ } jmr->kqjobmgr_callback = jobmgr_callback; - strcpy(jmr->name, name ? name : "Under construction"); + strcpy(jmr->name_init, name ? name : "Under construction"); jmr->req_port = requestorport; @@ -4603,7 +4621,7 @@ } if (!name) { - sprintf(jmr->name, "%u", MACH_PORT_INDEX(jmr->jm_port)); + sprintf(jmr->name_init, "%u", MACH_PORT_INDEX(jmr->jm_port)); } /* Sigh... at the moment, MIG has maxsize == sizeof(reply union) */ @@ -5045,7 +5063,7 @@ si->why = why; if (what) { - strcpy(si->what, what); + strcpy(si->what_init, what); } SLIST_INSERT_HEAD(&j->semaphores, si, sle); @@ -6325,7 +6343,7 @@ } jobmgr_log(j->mgr, LOG_DEBUG, "Renaming to: %s", session_type); - strcpy(j->mgr->name, session_type); + strcpy(j->mgr->name_init, session_type); if (job_assumes(j, (j2 = jobmgr_init_session(j->mgr, session_type, false)))) { job_assumes(j, job_dispatch(j2, true)); -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080310/47c47995/attachment.html From source_changes at macosforge.org Mon Mar 10 14:09:43 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Mon, 10 Mar 2008 14:09:43 -0700 (PDT) Subject: [launchd-changes] [23544] branches/SULeopard/launchd/src/launchd_core_logic.c Message-ID: <20080310210943.3886A148FECC@beta.macosforge.org> Revision: 23544 http://trac.macosforge.org/projects/launchd/changeset/23544 Author: zarzycki at apple.com Date: 2008-03-10 14:09:42 -0700 (Mon, 10 Mar 2008) Log Message: ----------- dirname() is tricky Modified Paths: -------------- branches/SULeopard/launchd/src/launchd_core_logic.c Modified: branches/SULeopard/launchd/src/launchd_core_logic.c =================================================================== --- branches/SULeopard/launchd/src/launchd_core_logic.c 2008-03-10 20:49:07 UTC (rev 23543) +++ branches/SULeopard/launchd/src/launchd_core_logic.c 2008-03-10 21:09:42 UTC (rev 23544) @@ -170,7 +170,10 @@ SLIST_ENTRY(socketgroup) sle; int *fds; unsigned int junkfds:1, fd_cnt:31; - char name[0]; + union { + const char name[0]; + char name_init[0]; + }; }; static bool socketgroup_new(job_t j, const char *name, int *fds, unsigned int fd_cnt, bool junkfds); @@ -202,7 +205,10 @@ struct envitem { SLIST_ENTRY(envitem) sle; char *value; - char key[0]; + union { + const char key[0]; + char key_init[0]; + }; }; static bool envitem_new(job_t j, const char *k, const char *v, bool global); @@ -242,7 +248,10 @@ SLIST_ENTRY(semaphoreitem) sle; semaphore_reason_t why; int fd; - char what[0]; + union { + const char what[0]; + char what_init[0]; + }; }; struct semaphoreitem_dict_iter_context { @@ -279,7 +288,10 @@ unsigned int hopefully_first_cnt; unsigned int normal_active_cnt; unsigned int sent_stop_to_normal_jobs:1, sent_stop_to_hopefully_last_jobs:1, shutting_down:1, session_initialized:1; - char name[0]; + union { + const char name[0]; + char name_init[0]; + }; }; #define jobmgr_assumes(jm, e) \ @@ -3334,11 +3346,10 @@ void semaphoreitem_watch(job_t j, struct semaphoreitem *si) { - char parentdir_path[PATH_MAX], *which_path = si->what; + char *parentdir, tmp_path[PATH_MAX]; + const char *which_path = si->what; int saved_errno = 0; int fflags = 0; - - strlcpy(parentdir_path, dirname(si->what), sizeof(parentdir_path)); switch (si->why) { case PATH_EXISTS: @@ -3355,11 +3366,18 @@ return; } + /* dirname() may modify tmp_path */ + strlcpy(tmp_path, si->what, sizeof(tmp_path)); + + if (!job_assumes(j, (parentdir = dirname(tmp_path)))) { + return; + } + /* See 5321044 for why we do the do-while loop and 5415523 for why ENOENT is checked */ do { if (si->fd == -1) { if ((si->fd = _fd(open(which_path, O_EVTONLY|O_NOCTTY))) == -1) { - which_path = parentdir_path; + which_path = parentdir; si->fd = _fd(open(which_path, O_EVTONLY|O_NOCTTY)); } } @@ -3600,7 +3618,7 @@ } memcpy(sg->fds, fds, fd_cnt * sizeof(int)); - strcpy(sg->name, name); + strcpy(sg->name_init, name); SLIST_INSERT_HEAD(&j->sockets, sg, sle); @@ -3692,8 +3710,8 @@ return false; } - strcpy(ei->key, k); - ei->value = ei->key + strlen(k) + 1; + strcpy(ei->key_init, k); + ei->value = ei->key_init + strlen(k) + 1; strcpy(ei->value, v); if (global) { @@ -4401,7 +4419,7 @@ } jmr->kqjobmgr_callback = jobmgr_callback; - strcpy(jmr->name, name ? name : "Under construction"); + strcpy(jmr->name_init, name ? name : "Under construction"); jmr->req_port = requestorport; @@ -4449,7 +4467,7 @@ } if (!name) { - sprintf(jmr->name, "%u", MACH_PORT_INDEX(jmr->jm_port)); + sprintf(jmr->name_init, "%u", MACH_PORT_INDEX(jmr->jm_port)); } /* Sigh... at the moment, MIG has maxsize == sizeof(reply union) */ @@ -4889,7 +4907,7 @@ si->why = why; if (what) { - strcpy(si->what, what); + strcpy(si->what_init, what); } SLIST_INSERT_HEAD(&j->semaphores, si, sle); @@ -6168,7 +6186,7 @@ } jobmgr_log(j->mgr, LOG_DEBUG, "Renaming to: %s", session_type); - strcpy(j->mgr->name, session_type); + strcpy(j->mgr->name_init, session_type); if (job_assumes(j, (j2 = jobmgr_init_session(j->mgr, session_type, false)))) { job_assumes(j, job_dispatch(j2, true)); -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080310/03106d8c/attachment-0001.html From source_changes at macosforge.org Mon Mar 10 19:55:07 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Mon, 10 Mar 2008 19:55:07 -0700 (PDT) Subject: [launchd-changes] [23545] trunk/launchd/src/launchd_runtime.c Message-ID: <20080311025507.B91D41491F82@beta.macosforge.org> Revision: 23545 http://trac.macosforge.org/projects/launchd/changeset/23545 Author: zarzycki at apple.com Date: 2008-03-10 19:55:06 -0700 (Mon, 10 Mar 2008) Log Message: ----------- A more accurate comment for Mach send-once notifications. Modified Paths: -------------- trunk/launchd/src/launchd_runtime.c Modified: trunk/launchd/src/launchd_runtime.c =================================================================== --- trunk/launchd/src/launchd_runtime.c 2008-03-10 21:09:42 UTC (rev 23544) +++ trunk/launchd/src/launchd_runtime.c 2008-03-11 02:55:06 UTC (rev 23545) @@ -924,9 +924,9 @@ kern_return_t do_mach_notify_send_once(mach_port_t notify __attribute__((unused))) { - /* This message is sent to us every time we close a port that we have - * outstanding Mach notification requests on. We can safely ignore this - * message. + /* + * This message is sent for each send-once right that is deallocated + * without being used. */ return KERN_SUCCESS; -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080310/7d29e6ec/attachment.html From source_changes at macosforge.org Tue Mar 11 11:08:19 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 11 Mar 2008 11:08:19 -0700 (PDT) Subject: [launchd-changes] [23546] tags/launchd-258.8/ Message-ID: <20080311180819.EF40E1498EA7@beta.macosforge.org> Revision: 23546 http://trac.macosforge.org/projects/launchd/changeset/23546 Author: zarzycki at apple.com Date: 2008-03-11 11:08:18 -0700 (Tue, 11 Mar 2008) Log Message: ----------- "Tagging launchd-258.8 from https://svn.macosforge.org/repository/launchd/branches/SULeopard" Added Paths: ----------- tags/launchd-258.8/ Copied: tags/launchd-258.8 (from rev 23545, branches/SULeopard) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080311/48c46d4f/attachment.html From source_changes at macosforge.org Tue Mar 11 13:38:32 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 11 Mar 2008 13:38:32 -0700 (PDT) Subject: [launchd-changes] [23547] tags/launchd-263/ Message-ID: <20080311203832.0ED661499770@beta.macosforge.org> Revision: 23547 http://trac.macosforge.org/projects/launchd/changeset/23547 Author: zarzycki at apple.com Date: 2008-03-11 13:38:31 -0700 (Tue, 11 Mar 2008) Log Message: ----------- "Tagging launchd-263 from https://svn.macosforge.org/repository/launchd/trunk" Added Paths: ----------- tags/launchd-263/ Copied: tags/launchd-263 (from rev 23546, trunk) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080311/8e9a9b63/attachment.html From source_changes at macosforge.org Tue Mar 11 15:54:16 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 11 Mar 2008 15:54:16 -0700 (PDT) Subject: [launchd-changes] [23549] tags/launchd-258.9/ Message-ID: <20080311225416.A0CFC1499FE2@beta.macosforge.org> Revision: 23549 http://trac.macosforge.org/projects/launchd/changeset/23549 Author: zarzycki at apple.com Date: 2008-03-11 15:54:16 -0700 (Tue, 11 Mar 2008) Log Message: ----------- "Tagging launchd-258.9 from https://svn.macosforge.org/repository/launchd/branches/SULeopard" Added Paths: ----------- tags/launchd-258.9/ Copied: tags/launchd-258.9 (from rev 23548, branches/SULeopard) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080311/a5136132/attachment.html From source_changes at macosforge.org Tue Mar 11 15:54:11 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 11 Mar 2008 15:54:11 -0700 (PDT) Subject: [launchd-changes] [23548] branches/SULeopard/launchd/src/libvproc.c Message-ID: <20080311225411.7A4531499FC1@beta.macosforge.org> Revision: 23548 http://trac.macosforge.org/projects/launchd/changeset/23548 Author: zarzycki at apple.com Date: 2008-03-11 15:54:11 -0700 (Tue, 11 Mar 2008) Log Message: ----------- Build failure fix. Modified Paths: -------------- branches/SULeopard/launchd/src/libvproc.c Modified: branches/SULeopard/launchd/src/libvproc.c =================================================================== --- branches/SULeopard/launchd/src/libvproc.c 2008-03-11 20:38:31 UTC (rev 23547) +++ branches/SULeopard/launchd/src/libvproc.c 2008-03-11 22:54:11 UTC (rev 23548) @@ -32,6 +32,9 @@ #include #include #include +#if HAVE_QUARANTINE +#include +#endif #include "liblaunch_public.h" #include "liblaunch_private.h" -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080311/f9ec95fe/attachment-0001.html From source_changes at macosforge.org Wed Mar 12 09:44:24 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 12 Mar 2008 09:44:24 -0700 (PDT) Subject: [launchd-changes] [23550] trunk/launchd/src/launchd_core_logic.c Message-ID: <20080312164424.ABCCA149D0A1@beta.macosforge.org> Revision: 23550 http://trac.macosforge.org/projects/launchd/changeset/23550 Author: zarzycki at apple.com Date: 2008-03-12 09:44:23 -0700 (Wed, 12 Mar 2008) Log Message: ----------- Save a few machine instructions. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-11 22:54:16 UTC (rev 23549) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-12 16:44:23 UTC (rev 23550) @@ -3514,19 +3514,18 @@ char *parentdir, tmp_path[PATH_MAX]; const char *which_path = si->what; int saved_errno = 0; - int fflags = 0; + int fflags = NOTE_DELETE|NOTE_RENAME; switch (si->why) { + case DIR_NOT_EMPTY: + case PATH_CHANGES: + fflags |= NOTE_ATTRIB|NOTE_LINK; + /* fall through */ case PATH_EXISTS: - fflags = NOTE_DELETE|NOTE_RENAME|NOTE_REVOKE|NOTE_EXTEND|NOTE_WRITE; - break; + fflags |= NOTE_REVOKE|NOTE_EXTEND|NOTE_WRITE; + /* fall through */ case PATH_MISSING: - fflags = NOTE_DELETE|NOTE_RENAME; break; - case DIR_NOT_EMPTY: - case PATH_CHANGES: - fflags = NOTE_DELETE|NOTE_RENAME|NOTE_REVOKE|NOTE_EXTEND|NOTE_WRITE|NOTE_ATTRIB|NOTE_LINK; - break; default: return; } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080312/82224199/attachment.html From source_changes at macosforge.org Wed Mar 12 10:14:12 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 12 Mar 2008 10:14:12 -0700 (PDT) Subject: [launchd-changes] [23551] trunk/launchd/src Message-ID: <20080312171412.A23F6149D18B@beta.macosforge.org> Revision: 23551 http://trac.macosforge.org/projects/launchd/changeset/23551 Author: zarzycki at apple.com Date: 2008-03-12 10:14:11 -0700 (Wed, 12 Mar 2008) Log Message: ----------- liblaunch.c consumes API deprecated in 10.6 Modified Paths: -------------- trunk/launchd/src/launchctl.c trunk/launchd/src/liblaunch.c Modified: trunk/launchd/src/launchctl.c =================================================================== --- trunk/launchd/src/launchctl.c 2008-03-12 16:44:23 UTC (rev 23550) +++ trunk/launchd/src/launchctl.c 2008-03-12 17:14:11 UTC (rev 23551) @@ -1791,11 +1791,11 @@ cmd = launch_data_get_string(tmp); if ((kr = bootstrap_create_server(bootstrap_port, (char *)cmd, u, d, &msr)) != KERN_SUCCESS) { - fprintf(stderr, "%s: bootstrap_create_server(): %d\n", getprogname(), kr); + fprintf(stderr, "%s: bootstrap_create_server(): %s\n", getprogname(), bootstrap_strerror(kr)); continue; } if ((kr = bootstrap_check_in(msr, (char*)sn, &msv)) != KERN_SUCCESS) { - fprintf(stderr, "%s: bootstrap_create_service(): %d\n", getprogname(), kr); + fprintf(stderr, "%s: bootstrap_check_in(): %s\n", getprogname(), bootstrap_strerror(kr)); mach_port_mod_refs(mach_task_self(), msv, MACH_PORT_RIGHT_RECEIVE, -1); continue; } Modified: trunk/launchd/src/liblaunch.c =================================================================== --- trunk/launchd/src/liblaunch.c 2008-03-12 16:44:23 UTC (rev 23550) +++ trunk/launchd/src/liblaunch.c 2008-03-12 17:14:11 UTC (rev 23551) @@ -1224,8 +1224,8 @@ if (bootstrap_create_server(bootstrap_port, BEZEL_UI_PATH, target_user, true, &bezel_ui_server) == BOOTSTRAP_SUCCESS) { mach_port_t srv; - if (bootstrap_create_service(bezel_ui_server, BEZEL_UI_SERVICE, &srv) == BOOTSTRAP_SUCCESS) { - mach_port_deallocate(mach_task_self(), srv); + if (bootstrap_check_in(bezel_ui_server, BEZEL_UI_SERVICE, &srv) == BOOTSTRAP_SUCCESS) { + mach_port_mod_refs(mach_task_self(), srv, MACH_PORT_RIGHT_RECEIVE, -1); } mach_port_deallocate(mach_task_self(), bezel_ui_server); -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080312/29c44924/attachment.html From source_changes at macosforge.org Wed Mar 12 15:13:45 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 12 Mar 2008 15:13:45 -0700 (PDT) Subject: [launchd-changes] [23553] trunk/launchd/src Message-ID: <20080312221345.8FA18149E479@beta.macosforge.org> Revision: 23553 http://trac.macosforge.org/projects/launchd/changeset/23553 Author: zarzycki at apple.com Date: 2008-03-12 15:13:45 -0700 (Wed, 12 Mar 2008) Log Message: ----------- Misc. Modified Paths: -------------- trunk/launchd/src/launchd.c trunk/launchd/src/launchd_unix_ipc.c Modified: trunk/launchd/src/launchd.c =================================================================== --- trunk/launchd/src/launchd.c 2008-03-12 22:13:32 UTC (rev 23552) +++ trunk/launchd/src/launchd.c 2008-03-12 22:13:45 UTC (rev 23553) @@ -114,6 +114,19 @@ testfd_or_openfd(STDOUT_FILENO, stdouterr_path, O_WRONLY); testfd_or_openfd(STDERR_FILENO, stdouterr_path, O_WRONLY); +#if 0 + if (pid1_magic) { + if (!getenv("DYLD_INSERT_LIBRARIES")) { + setenv("DYLD_INSERT_LIBRARIES", "/usr/lib/libgmalloc.dylib", 1); + setenv("MALLOC_STRICT_SIZE", "1", 1); + execv(argv[0], argv); + } else { + unsetenv("DYLD_INSERT_LIBRARIES"); + unsetenv("MALLOC_STRICT_SIZE"); + } + } +#endif + while ((ch = getopt(argc, argv, "s")) != -1) { switch (ch) { case 's': sflag = true; break; /* single user */ Modified: trunk/launchd/src/launchd_unix_ipc.c =================================================================== --- trunk/launchd/src/launchd_unix_ipc.c 2008-03-12 22:13:32 UTC (rev 23552) +++ trunk/launchd/src/launchd_unix_ipc.c 2008-03-12 22:13:45 UTC (rev 23553) @@ -81,9 +81,9 @@ } if (-1 == unlink(sockpath)) { - runtime_syslog(LOG_WARNING, "unlink(\"%s\"): %m", sockpath); + runtime_syslog(LOG_WARNING, "unlink(\"%s\"): %s", sockpath, strerror(errno)); } else if (-1 == rmdir(sockdir)) { - runtime_syslog(LOG_WARNING, "rmdir(\"%s\"): %m", sockdir); + runtime_syslog(LOG_WARNING, "rmdir(\"%s\"): %s", sockdir, strerror(errno)); } } @@ -115,18 +115,18 @@ stat(ourdir, &sb); if (!S_ISDIR(sb.st_mode)) { errno = EEXIST; - runtime_syslog(LOG_ERR, "mkdir(\"%s\"): %m", LAUNCHD_SOCK_PREFIX); + runtime_syslog(LOG_ERR, "mkdir(\"%s\"): %s", LAUNCHD_SOCK_PREFIX, strerror(errno)); goto out_bad; } } else { - runtime_syslog(LOG_ERR, "mkdir(\"%s\"): %m", ourdir); + runtime_syslog(LOG_ERR, "mkdir(\"%s\"): %s", ourdir, strerror(errno)); goto out_bad; } } } else { snprintf(ourdir, sizeof(ourdir), _PATH_TMP "launchd-%u.XXXXXX", getpid()); if (mkdtemp(ourdir) == NULL) { - runtime_syslog(LOG_ERR, "Could not create critical directory \"%s\": %m", ourdir); + runtime_syslog(LOG_ERR, "Could not create critical directory \"%s\": %s", ourdir, strerror(errno)); goto out_bad; } snprintf(sun.sun_path, sizeof(sun.sun_path), "%s/sock", ourdir); @@ -134,7 +134,7 @@ if (unlink(sun.sun_path) == -1 && errno != ENOENT) { if (errno != EROFS) { - runtime_syslog(LOG_ERR, "unlink(\"thesocket\"): %m"); + runtime_syslog(LOG_ERR, "unlink(\"thesocket\"): %s", strerror(errno)); } goto out_bad; } @@ -149,18 +149,18 @@ if (r == -1) { if (errno != EROFS) { - runtime_syslog(LOG_ERR, "bind(\"thesocket\"): %m"); + runtime_syslog(LOG_ERR, "bind(\"thesocket\"): %s", strerror(errno)); } goto out_bad; } if (listen(fd, SOMAXCONN) == -1) { - runtime_syslog(LOG_ERR, "listen(\"thesocket\"): %m"); + runtime_syslog(LOG_ERR, "listen(\"thesocket\"): %s", strerror(errno)); goto out_bad; } if (kevent_mod(fd, EVFILT_READ, EV_ADD, 0, 0, &kqipc_listen_callback) == -1) { - runtime_syslog(LOG_ERR, "kevent_mod(\"thesocket\", EVFILT_READ): %m"); + runtime_syslog(LOG_ERR, "kevent_mod(\"thesocket\", EVFILT_READ): %s", strerror(errno)); goto out_bad; } @@ -214,7 +214,7 @@ if (kev->filter == EVFILT_READ) { if (launchd_msg_recv(c->conn, ipc_readmsg, c) == -1 && errno != EAGAIN) { if (errno != ECONNRESET) { - runtime_syslog(LOG_DEBUG, "%s(): recv: %m", __func__); + runtime_syslog(LOG_DEBUG, "%s(): recv: %s", __func__, strerror(errno)); } ipc_close(c); } @@ -222,7 +222,7 @@ r = launchd_msg_send(c->conn, NULL); if (r == -1) { if (errno != EAGAIN) { - runtime_syslog(LOG_DEBUG, "%s(): send: %m", __func__); + runtime_syslog(LOG_DEBUG, "%s(): send: %s", __func__, strerror(errno)); ipc_close(c); } } else if (r == 0) { @@ -323,7 +323,7 @@ if (errno == EAGAIN) { kevent_mod(launchd_getfd(rmc.c->conn), EVFILT_WRITE, EV_ADD, 0, 0, &rmc.c->kqconn_callback); } else { - runtime_syslog(LOG_DEBUG, "launchd_msg_send() == -1: %m"); + runtime_syslog(LOG_DEBUG, "launchd_msg_send() == -1: %s", strerror(errno)); ipc_close(rmc.c); } } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080312/ee47a4fc/attachment-0001.html From source_changes at macosforge.org Wed Mar 12 15:13:33 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 12 Mar 2008 15:13:33 -0700 (PDT) Subject: [launchd-changes] [23552] trunk/launchd/src Message-ID: <20080312221333.31CD5149E447@beta.macosforge.org> Revision: 23552 http://trac.macosforge.org/projects/launchd/changeset/23552 Author: zarzycki at apple.com Date: 2008-03-12 15:13:32 -0700 (Wed, 12 Mar 2008) Log Message: ----------- 64-bit launchd executables Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/liblaunch.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-12 17:14:11 UTC (rev 23551) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-12 22:13:32 UTC (rev 23552) @@ -1209,6 +1209,7 @@ job_new(jobmgr_t jm, const char *label, const char *prog, const char *const *argv) { const char *const *argv_tmp = argv; + char tmp_path[PATH_MAX]; char auto_label[1000]; const char *bn = NULL; char *co; @@ -1229,7 +1230,12 @@ } if (unlikely(label == AUTO_PICK_LEGACY_LABEL)) { - bn = prog ? prog : basename((char *)argv[0]); /* prog for auto labels is kp.kp_kproc.p_comm */ + if (prog) { + bn = prog; + } else { + strlcpy(tmp_path, argv[0], sizeof(tmp_path)); + bn = basename(tmp_path); /* prog for auto labels is kp.kp_kproc.p_comm */ + } snprintf(auto_label, sizeof(auto_label), "%s.%s", sizeof(void *) == 8 ? "0xdeadbeeffeedface" : "0xbabecafe", bn); label = auto_label; /* This is so we can do gross things later. See NOTE_EXEC for anonymous jobs */ Modified: trunk/launchd/src/liblaunch.c =================================================================== --- trunk/launchd/src/liblaunch.c 2008-03-12 17:14:11 UTC (rev 23551) +++ trunk/launchd/src/liblaunch.c 2008-03-12 22:13:32 UTC (rev 23552) @@ -40,6 +40,22 @@ #include #include +#ifdef __LP64__ +/* workaround: 5723161 */ +#ifndef __DARWIN_ALIGN32 +#define __DARWIN_ALIGN32(x) (((size_t)(x) + 3) & ~3) +#endif +#undef CMSG_DATA +#define CMSG_DATA(cmsg) \ + ((uint8_t *)(cmsg) + __DARWIN_ALIGN32(sizeof(struct cmsghdr))) +#undef CMSG_SPACE +#define CMSG_SPACE(l) \ + (__DARWIN_ALIGN32(sizeof(struct cmsghdr)) + __DARWIN_ALIGN32(l)) +#undef CMSG_LEN +#define CMSG_LEN(l) \ + (__DARWIN_ALIGN32(sizeof(struct cmsghdr)) + (l)) +#endif + #include "libbootstrap_public.h" #include "libvproc_public.h" #include "libvproc_private.h" @@ -119,11 +135,11 @@ uint64_t opaque_size; }; }; - int fd; - mach_port_t mp; - int err; - long long number; - uint32_t boolean; /* We'd use 'bool' but this struct needs to be used under Rosetta, and sizeof(bool) is different between PowerPC and Intel */ + int64_t fd; + uint64_t mp; + uint64_t err; + int64_t number; + uint64_t boolean; /* We'd use 'bool' but this struct needs to be used under Rosetta, and sizeof(bool) is different between PowerPC and Intel */ double float_num; }; }; -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080312/6098882c/attachment.html From source_changes at macosforge.org Wed Mar 12 15:35:51 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 12 Mar 2008 15:35:51 -0700 (PDT) Subject: [launchd-changes] [23554] tags/launchd-264/ Message-ID: <20080312223551.8B36D149E568@beta.macosforge.org> Revision: 23554 http://trac.macosforge.org/projects/launchd/changeset/23554 Author: zarzycki at apple.com Date: 2008-03-12 15:35:51 -0700 (Wed, 12 Mar 2008) Log Message: ----------- "Tagging launchd-264 from https://svn.macosforge.org/repository/launchd/trunk" Added Paths: ----------- tags/launchd-264/ Copied: tags/launchd-264 (from rev 23553, trunk) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080312/6b5d35bf/attachment.html From source_changes at macosforge.org Mon Mar 17 10:36:17 2008 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Mon Mar 17 10:37:20 2008 Subject: [launchd-changes] [23555] tags/launchd-265/ Message-ID: <20080317173617.4712F14BD252@beta.macosforge.org> Revision: 23555 http://trac.macosforge.org/projects/launchd/changeset/23555 Author: zarzycki@apple.com Date: 2008-03-17 10:36:16 -0700 (Mon, 17 Mar 2008) Log Message: ----------- "Tagging launchd-265 from https://svn.macosforge.org/repository/launchd/trunk" Added Paths: ----------- tags/launchd-265/ Copied: tags/launchd-265 (from rev 23554, trunk) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080317/9cbe1062/attachment.html From source_changes at macosforge.org Tue Mar 18 10:46:23 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 18 Mar 2008 10:46:23 -0700 (PDT) Subject: [launchd-changes] [23556] trunk/launchd/src/liblaunch.c Message-ID: <20080318174623.EBD0914C273D@beta.macosforge.org> Revision: 23556 http://trac.macosforge.org/projects/launchd/changeset/23556 Author: zarzycki at apple.com Date: 2008-03-18 10:46:21 -0700 (Tue, 18 Mar 2008) Log Message: ----------- Unix callbacks can delete the underlying connection Modified Paths: -------------- trunk/launchd/src/liblaunch.c Modified: trunk/launchd/src/liblaunch.c =================================================================== --- trunk/launchd/src/liblaunch.c 2008-03-17 17:36:16 UTC (rev 23555) +++ trunk/launchd/src/liblaunch.c 2008-03-18 17:46:21 UTC (rev 23556) @@ -166,6 +166,7 @@ static launch_data_t launch_msg_internal(launch_data_t d); static void launch_mach_checkin_service(launch_data_t obj, const char *key, void *context); +static launch_t in_flight_msg_recv_client; static pthread_once_t _lc_once = PTHREAD_ONCE_INIT; static struct _launch_client { @@ -581,6 +582,10 @@ void launchd_close(launch_t lh, typeof(close) closefunc) { + if (in_flight_msg_recv_client == lh) { + in_flight_msg_recv_client = NULL; + } + if (lh->sendbuf) free(lh->sendbuf); if (lh->sendfds) @@ -1030,8 +1035,16 @@ goto out_bad; } + in_flight_msg_recv_client = lh; + cb(rmsg, context); + /* launchd and only launchd can call launchd_close() as a part of the callback */ + if (in_flight_msg_recv_client == NULL) { + r = 0; + break; + } + lh->recvlen -= data_offset; if (lh->recvlen > 0) { memmove(lh->recvbuf, lh->recvbuf + data_offset, lh->recvlen); -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080318/15e23471/attachment-0001.html From source_changes at macosforge.org Tue Mar 18 10:47:38 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 18 Mar 2008 10:47:38 -0700 (PDT) Subject: [launchd-changes] [23557] branches/SULeopard/launchd/src/liblaunch.c Message-ID: <20080318174738.7EE5614C2762@beta.macosforge.org> Revision: 23557 http://trac.macosforge.org/projects/launchd/changeset/23557 Author: zarzycki at apple.com Date: 2008-03-18 10:47:38 -0700 (Tue, 18 Mar 2008) Log Message: ----------- Unix callbacks can delete the underlying control block Modified Paths: -------------- branches/SULeopard/launchd/src/liblaunch.c Modified: branches/SULeopard/launchd/src/liblaunch.c =================================================================== --- branches/SULeopard/launchd/src/liblaunch.c 2008-03-18 17:46:21 UTC (rev 23556) +++ branches/SULeopard/launchd/src/liblaunch.c 2008-03-18 17:47:38 UTC (rev 23557) @@ -147,6 +147,7 @@ static launch_data_t launch_msg_internal(launch_data_t d); static void launch_mach_checkin_service(launch_data_t obj, const char *key, void *context); +static launch_t in_flight_msg_recv_client; static pthread_once_t _lc_once = PTHREAD_ONCE_INIT; static struct _launch_client { @@ -562,6 +563,10 @@ void launchd_close(launch_t lh, typeof(close) closefunc) { + if (in_flight_msg_recv_client == lh) { + in_flight_msg_recv_client = NULL; + } + if (lh->sendbuf) free(lh->sendbuf); if (lh->sendfds) @@ -1009,8 +1014,16 @@ goto out_bad; } + in_flight_msg_recv_client = lh; + cb(rmsg, context); + /* launchd and only launchd can call launchd_close() as a part of the callback */ + if (in_flight_msg_recv_client == NULL) { + r = 0; + break; + } + lh->recvlen -= data_offset; if (lh->recvlen > 0) { memmove(lh->recvbuf, lh->recvbuf + data_offset, lh->recvlen); -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080318/a7d32970/attachment.html From source_changes at macosforge.org Tue Mar 18 14:32:55 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Tue, 18 Mar 2008 14:32:55 -0700 (PDT) Subject: [launchd-changes] [23558] trunk/launchd/src/liblaunch.c Message-ID: <20080318213255.99A1314C33C6@beta.macosforge.org> Revision: 23558 http://trac.macosforge.org/projects/launchd/changeset/23558 Author: zarzycki at apple.com Date: 2008-03-18 14:32:54 -0700 (Tue, 18 Mar 2008) Log Message: ----------- Swap the byte-order of IPC. Modified Paths: -------------- trunk/launchd/src/liblaunch.c Modified: trunk/launchd/src/liblaunch.c =================================================================== --- trunk/launchd/src/liblaunch.c 2008-03-18 17:47:38 UTC (rev 23557) +++ trunk/launchd/src/liblaunch.c 2008-03-18 21:32:54 UTC (rev 23558) @@ -66,17 +66,17 @@ */ extern void __OSBogusByteSwap__(void); -#define host2big(x) \ +#define host2wire(x) \ ({ typeof (x) _X, _x = (x); \ switch (sizeof(_x)) { \ case 8: \ - _X = OSSwapHostToBigInt64(_x); \ + _X = OSSwapHostToLittleInt64(_x); \ break; \ case 4: \ - _X = OSSwapHostToBigInt32(_x); \ + _X = OSSwapHostToLittleInt32(_x); \ break; \ case 2: \ - _X = OSSwapHostToBigInt16(_x); \ + _X = OSSwapHostToLittleInt16(_x); \ break; \ case 1: \ _X = _x; \ @@ -89,17 +89,17 @@ }) -#define big2host(x) \ +#define big2wire(x) \ ({ typeof (x) _X, _x = (x); \ switch (sizeof(_x)) { \ case 8: \ - _X = OSSwapBigToHostInt64(_x); \ + _X = OSSwapLittleToHostInt64(_x); \ break; \ case 4: \ - _X = OSSwapBigToHostInt32(_x); \ + _X = OSSwapLittleToHostInt32(_x); \ break; \ case 2: \ - _X = OSSwapBigToHostInt16(_x); \ + _X = OSSwapLittleToHostInt16(_x); \ break; \ case 1: \ _X = _x; \ @@ -612,30 +612,30 @@ where += total_data_len; - o_in_w->type = host2big(d->type); + o_in_w->type = host2wire(d->type); switch (d->type) { case LAUNCH_DATA_INTEGER: - o_in_w->number = host2big(d->number); + o_in_w->number = host2wire(d->number); break; case LAUNCH_DATA_REAL: - o_in_w->float_num = host2big(d->float_num); + o_in_w->float_num = host2wire(d->float_num); break; case LAUNCH_DATA_BOOL: - o_in_w->boolean = host2big(d->boolean); + o_in_w->boolean = host2wire(d->boolean); break; case LAUNCH_DATA_ERRNO: - o_in_w->err = host2big(d->err); + o_in_w->err = host2wire(d->err); break; case LAUNCH_DATA_FD: - o_in_w->fd = host2big(d->fd); + o_in_w->fd = host2wire(d->fd); if (fd_where && d->fd != -1) { fd_where[*fd_cnt] = d->fd; (*fd_cnt)++; } break; case LAUNCH_DATA_STRING: - o_in_w->string_len = host2big(d->string_len); + o_in_w->string_len = host2wire(d->string_len); total_data_len += ROUND_TO_64BIT_WORD_SIZE(strlen(d->string) + 1); if (total_data_len > len) { return 0; @@ -643,7 +643,7 @@ memcpy(where, d->string, strlen(d->string) + 1); break; case LAUNCH_DATA_OPAQUE: - o_in_w->opaque_size = host2big(d->opaque_size); + o_in_w->opaque_size = host2wire(d->opaque_size); total_data_len += ROUND_TO_64BIT_WORD_SIZE(d->opaque_size); if (total_data_len > len) { return 0; @@ -652,7 +652,7 @@ break; case LAUNCH_DATA_DICTIONARY: case LAUNCH_DATA_ARRAY: - o_in_w->_array_cnt = host2big(d->_array_cnt); + o_in_w->_array_cnt = host2wire(d->_array_cnt); total_data_len += d->_array_cnt * sizeof(uint64_t); if (total_data_len > len) { return 0; @@ -686,10 +686,10 @@ return NULL; *data_offset += sizeof(struct _launch_data); - switch (big2host(r->type)) { + switch (big2wire(r->type)) { case LAUNCH_DATA_DICTIONARY: case LAUNCH_DATA_ARRAY: - tmpcnt = big2host(r->_array_cnt); + tmpcnt = big2wire(r->_array_cnt); if ((data_size - *data_offset) < (tmpcnt * sizeof(uint64_t))) { errno = EAGAIN; return NULL; @@ -704,7 +704,7 @@ r->_array_cnt = tmpcnt; break; case LAUNCH_DATA_STRING: - tmpcnt = big2host(r->string_len); + tmpcnt = big2wire(r->string_len); if ((data_size - *data_offset) < (tmpcnt + 1)) { errno = EAGAIN; return NULL; @@ -714,7 +714,7 @@ *data_offset += ROUND_TO_64BIT_WORD_SIZE(tmpcnt + 1); break; case LAUNCH_DATA_OPAQUE: - tmpcnt = big2host(r->opaque_size); + tmpcnt = big2wire(r->opaque_size); if ((data_size - *data_offset) < tmpcnt) { errno = EAGAIN; return NULL; @@ -730,16 +730,16 @@ } break; case LAUNCH_DATA_INTEGER: - r->number = big2host(r->number); + r->number = big2wire(r->number); break; case LAUNCH_DATA_REAL: - r->float_num = big2host(r->float_num); + r->float_num = big2wire(r->float_num); break; case LAUNCH_DATA_BOOL: - r->boolean = big2host(r->boolean); + r->boolean = big2wire(r->boolean); break; case LAUNCH_DATA_ERRNO: - r->err = big2host(r->err); + r->err = big2wire(r->err); case LAUNCH_DATA_MACHPORT: break; default: @@ -748,7 +748,7 @@ break; } - r->type = big2host(r->type); + r->type = big2wire(r->type); return r; } @@ -788,9 +788,9 @@ lh->sendfdcnt = fd_slots_used; - msglen = lh->sendlen + sizeof(struct launch_msg_header); /* type promotion to make the host2big() macro work right */ - lmh.len = host2big(msglen); - lmh.magic = host2big(LAUNCH_MSG_HEADER_MAGIC); + msglen = lh->sendlen + sizeof(struct launch_msg_header); /* type promotion to make the host2wire() macro work right */ + lmh.len = host2wire(msglen); + lmh.magic = host2wire(LAUNCH_MSG_HEADER_MAGIC); iov[0].iov_base = &lmh; iov[0].iov_len = sizeof(lmh); @@ -1019,9 +1019,9 @@ if (lh->recvlen < sizeof(struct launch_msg_header)) goto need_more_data; - tmplen = big2host(lmhp->len); + tmplen = big2wire(lmhp->len); - if (big2host(lmhp->magic) != LAUNCH_MSG_HEADER_MAGIC || tmplen <= sizeof(struct launch_msg_header)) { + if (big2wire(lmhp->magic) != LAUNCH_MSG_HEADER_MAGIC || tmplen <= sizeof(struct launch_msg_header)) { errno = EBADRPC; goto out_bad; } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080318/a14a3284/attachment.html From source_changes at macosforge.org Wed Mar 19 13:36:52 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 19 Mar 2008 13:36:52 -0700 (PDT) Subject: [launchd-changes] [23559] trunk/launchd/src/launchproxy.c Message-ID: <20080319203652.A2E8714C680D@beta.macosforge.org> Revision: 23559 http://trac.macosforge.org/projects/launchd/changeset/23559 Author: zarzycki at apple.com Date: 2008-03-19 13:36:52 -0700 (Wed, 19 Mar 2008) Log Message: ----------- getnameinfo() only supports IPv4 and IPv6 right now. Modified Paths: -------------- trunk/launchd/src/launchproxy.c Modified: trunk/launchd/src/launchproxy.c =================================================================== --- trunk/launchd/src/launchproxy.c 2008-03-18 21:32:54 UTC (rev 23558) +++ trunk/launchd/src/launchproxy.c 2008-03-19 20:36:52 UTC (rev 23559) @@ -159,19 +159,23 @@ syslog(LOG_DEBUG, "accept(): %m"); goto out; } else { - char fromhost[NI_MAXHOST]; - char fromport[NI_MAXSERV]; - int gni_r; + if (ss.ss_family == AF_INET || ss.ss_family == AF_INET6) { + char fromhost[NI_MAXHOST]; + char fromport[NI_MAXSERV]; + int gni_r; - gni_r = getnameinfo((struct sockaddr *)&ss, slen, - fromhost, sizeof(fromhost), - fromport, sizeof(fromport), - NI_NUMERICHOST | NI_NUMERICSERV); + gni_r = getnameinfo((struct sockaddr *)&ss, slen, + fromhost, sizeof(fromhost), + fromport, sizeof(fromport), + NI_NUMERICHOST | NI_NUMERICSERV); - if (gni_r) { - syslog(LOG_WARNING, "%s: getnameinfo(): %s", prog, gai_strerror(gni_r)); + if (gni_r) { + syslog(LOG_WARNING, "%s: getnameinfo(): %s", prog, gai_strerror(gni_r)); + } else { + syslog(LOG_INFO, "%s: Connection from: %s on port: %s", prog, fromhost, fromport); + } } else { - syslog(LOG_INFO, "%s: Connection from: %s on port: %s", prog, fromhost, fromport); + syslog(LOG_WARNING, "%s: getnameinfo() only supports IPv4/IPv6. Connection from address family: %u", prog, ss.ss_family); } switch (fork()) { -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080319/651fc675/attachment-0001.html From source_changes at macosforge.org Wed Mar 19 14:25:58 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 19 Mar 2008 14:25:58 -0700 (PDT) Subject: [launchd-changes] [23560] trunk/launchd/src/launchd_core_logic.c Message-ID: <20080319212558.7A85514C6A2A@beta.macosforge.org> Revision: 23560 http://trac.macosforge.org/projects/launchd/changeset/23560 Author: zarzycki at apple.com Date: 2008-03-19 14:25:58 -0700 (Wed, 19 Mar 2008) Log Message: ----------- Help developers help themselves. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-19 20:36:52 UTC (rev 23559) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-19 21:25:58 UTC (rev 23560) @@ -6024,6 +6024,10 @@ job_log(j, LOG_DEBUG, "Mach service registration failed. Already active: %s", servicename); return BOOTSTRAP_SERVICE_ACTIVE; } + if (ms->recv) { + job_log(j, LOG_ERR, "bootstrap_register() erroneous called instead of bootstrap_check_in(). Mach service: %s", servicename); + return BOOTSTRAP_NOT_PRIVILEGED; + } job_checkin(j); machservice_delete(j, ms, false); } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080319/fbe4bce6/attachment.html From source_changes at macosforge.org Wed Mar 19 14:35:39 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 19 Mar 2008 14:35:39 -0700 (PDT) Subject: [launchd-changes] [23561] trunk/launchd/src/launchd_core_logic.c Message-ID: <20080319213539.E745214C6AA8@beta.macosforge.org> Revision: 23561 http://trac.macosforge.org/projects/launchd/changeset/23561 Author: zarzycki at apple.com Date: 2008-03-19 14:35:38 -0700 (Wed, 19 Mar 2008) Log Message: ----------- Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-19 21:25:58 UTC (rev 23560) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-19 21:35:38 UTC (rev 23561) @@ -1161,7 +1161,7 @@ } if (jp && !jp->anonymous && unlikely(!(kp.kp_proc.p_flag & P_EXEC))) { - job_log(jp, LOG_APPLEONLY, "Performance and sanity: fork() without exec*(). Please switch to posix_spawn(). Child PID %u", + job_log(jp, LOG_APPLEONLY, "Called *fork(). Please switch to posix_spawn*(), pthreads or launchd. Child PID %u", kp.kp_proc.p_pid); } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080319/a7f32618/attachment.html From source_changes at macosforge.org Wed Mar 19 14:43:26 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 19 Mar 2008 14:43:26 -0700 (PDT) Subject: [launchd-changes] [23562] trunk/launchd/src/launchd_core_logic.c Message-ID: <20080319214326.52AD614C6AFF@beta.macosforge.org> Revision: 23562 http://trac.macosforge.org/projects/launchd/changeset/23562 Author: zarzycki at apple.com Date: 2008-03-19 14:43:25 -0700 (Wed, 19 Mar 2008) Log Message: ----------- Don't accidentally machservice_delete() services that are managed with recv-rights. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-19 21:35:38 UTC (rev 23561) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-19 21:43:25 UTC (rev 23562) @@ -4183,7 +4183,7 @@ } SLIST_FOREACH(ms, &j->machservices, sle) { - if (ms->recv && ms->isActive) { + if (ms->recv && machservice_active(ms)) { return "Mach service is still active"; } } @@ -4720,7 +4720,7 @@ } LIST_FOREACH_SAFE(ms, &port_hash[HASH_PORT(port)], port_hash_sle, next_ms) { - if (ms->port == port) { + if (ms->port == port && !ms->recv) { machservice_delete(ms->job, ms, true); } } @@ -4811,7 +4811,7 @@ job_assumes(j, host_reboot(mach_host_self(), HOST_REBOOT_DEBUGGER) == KERN_SUCCESS); } - if (ms->recv && job_assumes(j, !ms->isActive)) { + if (ms->recv && job_assumes(j, !machservice_active(ms)) { job_assumes(j, launchd_mport_close_recv(ms->port) == KERN_SUCCESS); } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080319/708efb1e/attachment.html From source_changes at macosforge.org Fri Mar 21 15:52:55 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Fri, 21 Mar 2008 15:52:55 -0700 (PDT) Subject: [launchd-changes] [23563] trunk/launchd/src Message-ID: <20080321225255.3053C14CE518@beta.macosforge.org> Revision: 23563 http://trac.macosforge.org/projects/launchd/changeset/23563 Author: zarzycki at apple.com Date: 2008-03-21 15:52:53 -0700 (Fri, 21 Mar 2008) Log Message: ----------- 10A34: Nothing in Installer log window Modified Paths: -------------- trunk/launchd/src/launchd_runtime.c trunk/launchd/src/libvproc.c trunk/launchd/src/libvproc_internal.h Modified: trunk/launchd/src/launchd_runtime.c =================================================================== --- trunk/launchd/src/launchd_runtime.c 2008-03-19 21:43:25 UTC (rev 23562) +++ trunk/launchd/src/launchd_runtime.c 2008-03-21 22:52:53 UTC (rev 23563) @@ -1282,10 +1282,10 @@ offset = (void *)*outval; while ((lm = STAILQ_FIRST(&logmsg_queue))) { - lm->from_name -= (size_t)lm; - lm->about_name -= (size_t)lm; - lm->msg -= (size_t)lm; - lm->session_name -= (size_t)lm; + lm->from_name_offset = lm->from_name - (char *)lm; + lm->about_name_offset = lm->about_name - (char *)lm; + lm->msg_offset = lm->msg - (char *)lm; + lm->session_name_offset = lm->session_name - (char *)lm; memcpy(offset, lm, lm->obj_sz); Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2008-03-19 21:43:25 UTC (rev 23562) +++ trunk/launchd/src/libvproc.c 2008-03-21 22:52:53 UTC (rev 23563) @@ -412,10 +412,10 @@ } for (lm = (struct logmsg_s *)outdata; tmp_cnt > 0; lm = ((void *)lm + lm->obj_sz)) { - lm->from_name += (size_t)lm; - lm->about_name += (size_t)lm; - lm->msg += (size_t)lm; - lm->session_name += (size_t)lm; + lm->from_name = (char *)lm + lm->from_name_offset; + lm->about_name = (char *)lm + lm->about_name_offset; + lm->msg = (char *)lm + lm->msg_offset; + lm->session_name = (char *)lm + lm->session_name_offset; tv.tv_sec = lm->when / USEC_PER_SEC; tv.tv_usec = lm->when % USEC_PER_SEC; Modified: trunk/launchd/src/libvproc_internal.h =================================================================== --- trunk/launchd/src/libvproc_internal.h 2008-03-19 21:43:25 UTC (rev 23562) +++ trunk/launchd/src/libvproc_internal.h 2008-03-21 22:52:53 UTC (rev 23563) @@ -58,7 +58,10 @@ struct logmsg_s { - STAILQ_ENTRY(logmsg_s) sqe; + union { + STAILQ_ENTRY(logmsg_s) sqe; + uint64_t __pad; + }; int64_t when; pid_t from_pid; pid_t about_pid; @@ -66,10 +69,22 @@ gid_t sender_gid; int err_num; int pri; - const char *from_name; - const char *about_name; - const char *session_name; - const char *msg; + union { + const char *from_name; + uint64_t from_name_offset; + }; + union { + const char *about_name; + uint64_t about_name_offset; + }; + union { + const char *session_name; + uint64_t session_name_offset; + }; + union { + const char *msg; + uint64_t msg_offset; + }; size_t obj_sz; char data[0]; }; -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080321/180b4f6c/attachment-0001.html From source_changes at macosforge.org Fri Mar 21 15:53:56 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Fri, 21 Mar 2008 15:53:56 -0700 (PDT) Subject: [launchd-changes] [23564] trunk/launchd/src/launchctl.c Message-ID: <20080321225356.957C214CE53E@beta.macosforge.org> Revision: 23564 http://trac.macosforge.org/projects/launchd/changeset/23564 Author: zarzycki at apple.com Date: 2008-03-21 15:53:56 -0700 (Fri, 21 Mar 2008) Log Message: ----------- A global launchd.conf for the per-user launchd. Modified Paths: -------------- trunk/launchd/src/launchctl.c Modified: trunk/launchd/src/launchctl.c =================================================================== --- trunk/launchd/src/launchctl.c 2008-03-21 22:52:53 UTC (rev 23563) +++ trunk/launchd/src/launchctl.c 2008-03-21 22:53:56 UTC (rev 23564) @@ -318,10 +318,17 @@ read_launchd_conf(void) { char s[1000], *c, *av[100]; + const char *file; size_t len, i; FILE *f; - if (!(f = fopen("/etc/launchd.conf", "r"))) { + if (getppid() == 1) { + file = "/etc/launchd.conf"; + } else { + file = "/etc/launchd-user.conf"; + } + + if (!(f = fopen(file, "r"))) { return; } @@ -1625,11 +1632,12 @@ the_argc += 1; } + if (strcasecmp(session_type, VPROCMGR_SESSION_BACKGROUND) == 0) { + read_launchd_conf(); #if HAVE_SECURITY - if (strcasecmp(session_type, VPROCMGR_SESSION_BACKGROUND) == 0) { assumes(SessionCreate(sessionKeepCurrentBootstrap, 0) == 0); +#endif } -#endif return load_and_unload_cmd(the_argc, load_launchd_items); } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080321/e259c33f/attachment.html From source_changes at macosforge.org Fri Mar 21 15:54:37 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Fri, 21 Mar 2008 15:54:37 -0700 (PDT) Subject: [launchd-changes] [23565] trunk/launchd/src/launchd_core_logic.c Message-ID: <20080321225437.16CB414CE575@beta.macosforge.org> Revision: 23565 http://trac.macosforge.org/projects/launchd/changeset/23565 Author: zarzycki at apple.com Date: 2008-03-21 15:54:36 -0700 (Fri, 21 Mar 2008) Log Message: ----------- Validate job labels. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-21 22:53:56 UTC (rev 23564) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-21 22:54:36 UTC (rev 23565) @@ -304,6 +304,7 @@ static job_t jobmgr_import2(jobmgr_t jm, launch_data_t pload); static jobmgr_t jobmgr_parent(jobmgr_t jm); static jobmgr_t jobmgr_do_garbage_collection(jobmgr_t jm); +static bool jobmgr_label_test(jobmgr_t jm, const char *str); static void jobmgr_reap_bulk(jobmgr_t jm, struct kevent *kev); static void jobmgr_log_stray_children(jobmgr_t jm); static void jobmgr_remove(jobmgr_t jm); @@ -1956,10 +1957,7 @@ if (unlikely((j = job_find(label)) != NULL)) { errno = EEXIST; return NULL; - } else if (unlikely(label[0] == '\0' || (strncasecmp(label, "", strlen("com.apple.launchd")) == 0) || - (strtol(label, NULL, 10) != 0))) { - jobmgr_log(jm, LOG_ERR, "Somebody attempted to use a reserved prefix for a label: %s", label); - /* the empty string, com.apple.launchd and number prefixes for labels are reserved */ + } else if (unlikely(!jobmgr_label_test(jm, label))) { errno = EINVAL; return NULL; } @@ -1971,6 +1969,40 @@ return j; } +bool +jobmgr_label_test(jobmgr_t jm, const char *str) +{ + char *endstr = NULL; + const char *ptr; + + if (str[0] == '\0') { + jobmgr_log(jm, LOG_ERR, "Empty job labels are not allowed"); + return false; + } + + for (ptr = str; *ptr; ptr++) { + if (iscntrl(*ptr)) { + jobmgr_log(jm, LOG_ERR, "ASCII control characters are not allowed in job labels. Index: %td Value: 0x%hhx", ptr - str, *ptr); + return false; + } + } + + strtoll(str, &endstr, 0); + + if (str != endstr) { + jobmgr_log(jm, LOG_ERR, "Job labels are not allowed to begin with numbers: %s", str); + return false; + } + + if ((strncasecmp(str, "com.apple.launchd", strlen("com.apple.launchd")) == 0) || + (strncasecmp(str, "com.apple.launchctl", strlen("com.apple.launchctl")) == 0)) { + jobmgr_log(jm, LOG_ERR, "Job labels are not allowed to use a reserved prefix: %s", str); + return false; + } + + return true; +} + INTERNAL_ABI job_t job_find(const char *label) { -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080321/bc1915a1/attachment.html From source_changes at macosforge.org Fri Mar 21 15:57:07 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Fri, 21 Mar 2008 15:57:07 -0700 (PDT) Subject: [launchd-changes] [23566] branches/SULeopard/launchd/src/launchctl.c Message-ID: <20080321225707.78BD014CE5A6@beta.macosforge.org> Revision: 23566 http://trac.macosforge.org/projects/launchd/changeset/23566 Author: zarzycki at apple.com Date: 2008-03-21 15:57:06 -0700 (Fri, 21 Mar 2008) Log Message: ----------- A launchd.conf for the per-user launchd. Modified Paths: -------------- branches/SULeopard/launchd/src/launchctl.c Modified: branches/SULeopard/launchd/src/launchctl.c =================================================================== --- branches/SULeopard/launchd/src/launchctl.c 2008-03-21 22:54:36 UTC (rev 23565) +++ branches/SULeopard/launchd/src/launchctl.c 2008-03-21 22:57:06 UTC (rev 23566) @@ -313,10 +313,17 @@ read_launchd_conf(void) { char s[1000], *c, *av[100]; + const char *file; size_t len, i; FILE *f; - if (!(f = fopen("/etc/launchd.conf", "r"))) { + if (getppid() == 1) { + file = "/etc/launchd.conf"; + } else { + file = "/etc/launchd-user.conf"; + } + + if (!(f = fopen(file, "r"))) { return; } @@ -1618,11 +1625,12 @@ the_argc += 1; } + if (strcasecmp(session_type, VPROCMGR_SESSION_BACKGROUND) == 0) { + read_launchd_conf(); #if HAVE_SECURITY - if (strcasecmp(session_type, VPROCMGR_SESSION_BACKGROUND) == 0) { assumes(SessionCreate(sessionKeepCurrentBootstrap, 0) == 0); +#endif } -#endif return load_and_unload_cmd(the_argc, load_launchd_items); } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080321/d47d3b76/attachment.html From source_changes at macosforge.org Fri Mar 21 15:57:19 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Fri, 21 Mar 2008 15:57:19 -0700 (PDT) Subject: [launchd-changes] [23567] branches/SULeopard/launchd/src/launchd_core_logic.c Message-ID: <20080321225719.6268A14CE5CF@beta.macosforge.org> Revision: 23567 http://trac.macosforge.org/projects/launchd/changeset/23567 Author: zarzycki at apple.com Date: 2008-03-21 15:57:19 -0700 (Fri, 21 Mar 2008) Log Message: ----------- Validate job labels. Modified Paths: -------------- branches/SULeopard/launchd/src/launchd_core_logic.c Modified: branches/SULeopard/launchd/src/launchd_core_logic.c =================================================================== --- branches/SULeopard/launchd/src/launchd_core_logic.c 2008-03-21 22:57:06 UTC (rev 23566) +++ branches/SULeopard/launchd/src/launchd_core_logic.c 2008-03-21 22:57:19 UTC (rev 23567) @@ -301,6 +301,7 @@ static job_t jobmgr_import2(jobmgr_t jm, launch_data_t pload); static jobmgr_t jobmgr_parent(jobmgr_t jm); static jobmgr_t jobmgr_do_garbage_collection(jobmgr_t jm); +static bool jobmgr_label_test(jobmgr_t jm, const char *str); static void jobmgr_reap_bulk(jobmgr_t jm, struct kevent *kev); static void jobmgr_log_stray_children(jobmgr_t jm); static void jobmgr_remove(jobmgr_t jm); @@ -1883,10 +1884,7 @@ if ((j = job_find(label)) != NULL) { errno = EEXIST; return NULL; - } else if (label[0] == '\0' || (strncasecmp(label, "", strlen("com.apple.launchd")) == 0) || - (strtol(label, NULL, 10) != 0)) { - jobmgr_log(jm, LOG_ERR, "Somebody attempted to use a reserved prefix for a label: %s", label); - /* the empty string, com.apple.launchd and number prefixes for labels are reserved */ + } else if (!jobmgr_label_test(jm, label)) { errno = EINVAL; return NULL; } @@ -1898,6 +1896,40 @@ return j; } +bool +jobmgr_label_test(jobmgr_t jm, const char *str) +{ + char *endstr = NULL; + const char *ptr; + + if (str[0] == '\0') { + jobmgr_log(jm, LOG_ERR, "Empty job labels are not allowed"); + return false; + } + + for (ptr = str; *ptr; ptr++) { + if (iscntrl(*ptr)) { + jobmgr_log(jm, LOG_ERR, "ASCII control characters are not allowed in job labels. Index: %td Value: 0x%hhx", ptr - str, *ptr); + return false; + } + } + + strtoll(str, &endstr, 0); + + if (str != endstr) { + jobmgr_log(jm, LOG_ERR, "Job labels are not allowed to begin with numbers: %s", str); + return false; + } + + if ((strncasecmp(str, "com.apple.launchd", strlen("com.apple.launchd")) == 0) || + (strncasecmp(str, "com.apple.launchctl", strlen("com.apple.launchctl")) == 0)) { + jobmgr_log(jm, LOG_ERR, "Job labels are not allowed to use a reserved prefix: %s", str); + return false; + } + + return true; +} + job_t job_find(const char *label) { -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080321/d41bb993/attachment-0001.html From source_changes at macosforge.org Fri Mar 21 15:59:50 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Fri, 21 Mar 2008 15:59:50 -0700 (PDT) Subject: [launchd-changes] [23568] tags/launchd-258.10/ Message-ID: <20080321225950.C502B14CE60C@beta.macosforge.org> Revision: 23568 http://trac.macosforge.org/projects/launchd/changeset/23568 Author: zarzycki at apple.com Date: 2008-03-21 15:59:50 -0700 (Fri, 21 Mar 2008) Log Message: ----------- "Tagging launchd-258.10 from https://svn.macosforge.org/repository/launchd/branches/SULeopard" Added Paths: ----------- tags/launchd-258.10/ Copied: tags/launchd-258.10 (from rev 23567, branches/SULeopard) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080321/d306d6cc/attachment.html From source_changes at macosforge.org Fri Mar 21 16:33:28 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Fri, 21 Mar 2008 16:33:28 -0700 (PDT) Subject: [launchd-changes] [23569] tags/launchd-266/ Message-ID: <20080321233328.DA25014CE7DD@beta.macosforge.org> Revision: 23569 http://trac.macosforge.org/projects/launchd/changeset/23569 Author: zarzycki at apple.com Date: 2008-03-21 16:33:28 -0700 (Fri, 21 Mar 2008) Log Message: ----------- "Tagging launchd-266 from https://svn.macosforge.org/repository/launchd/trunk" Added Paths: ----------- tags/launchd-266/ Copied: tags/launchd-266 (from rev 23568, trunk) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080321/71bc8fe4/attachment.html From source_changes at macosforge.org Sun Mar 23 21:21:46 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Sun, 23 Mar 2008 21:21:46 -0700 (PDT) Subject: [launchd-changes] [23570] trunk/launchd/src/launchd_core_logic.c Message-ID: <20080324042146.71EAD14DA5A1@beta.macosforge.org> Revision: 23570 http://trac.macosforge.org/projects/launchd/changeset/23570 Author: zarzycki at apple.com Date: 2008-03-23 21:21:44 -0700 (Sun, 23 Mar 2008) Log Message: ----------- Typo. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-21 23:33:28 UTC (rev 23569) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-24 04:21:44 UTC (rev 23570) @@ -4843,7 +4843,7 @@ job_assumes(j, host_reboot(mach_host_self(), HOST_REBOOT_DEBUGGER) == KERN_SUCCESS); } - if (ms->recv && job_assumes(j, !machservice_active(ms)) { + if (ms->recv && job_assumes(j, !machservice_active(ms))) { job_assumes(j, launchd_mport_close_recv(ms->port) == KERN_SUCCESS); } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080323/bdd2f031/attachment.html From source_changes at macosforge.org Sun Mar 23 21:21:57 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Sun, 23 Mar 2008 21:21:57 -0700 (PDT) Subject: [launchd-changes] [23571] tags/launchd-266.1/ Message-ID: <20080324042157.9488C14DA5C2@beta.macosforge.org> Revision: 23571 http://trac.macosforge.org/projects/launchd/changeset/23571 Author: zarzycki at apple.com Date: 2008-03-23 21:21:57 -0700 (Sun, 23 Mar 2008) Log Message: ----------- "Tagging launchd-266.1 from https://svn.macosforge.org/repository/launchd/trunk" Added Paths: ----------- tags/launchd-266.1/ Copied: tags/launchd-266.1 (from rev 23570, trunk) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080323/6e2d0367/attachment.html From source_changes at macosforge.org Wed Mar 26 18:40:29 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 26 Mar 2008 18:40:29 -0700 (PDT) Subject: [launchd-changes] [23572] trunk/Makefile Message-ID: <20080327014029.97CE714F27C3@beta.macosforge.org> Revision: 23572 http://trac.macosforge.org/projects/launchd/changeset/23572 Author: zarzycki at apple.com Date: 2008-03-26 18:40:28 -0700 (Wed, 26 Mar 2008) Log Message: ----------- 10A36: SystemStarter crash Modified Paths: -------------- trunk/Makefile Modified: trunk/Makefile =================================================================== --- trunk/Makefile 2008-03-24 04:21:57 UTC (rev 23571) +++ trunk/Makefile 2008-03-27 01:40:28 UTC (rev 23572) @@ -24,6 +24,8 @@ mkdir -p $(DSTROOT)/System/Library/StartupItems chmod 755 $(DSTROOT)/System/Library/StartupItems endif + -lipo -remove ppc64 -output $(DSTROOT)/sbin/SystemStarter $(DSTROOT)/sbin/SystemStarter + -lipo -remove x86_64 -output $(DSTROOT)/sbin/SystemStarter $(DSTROOT)/sbin/SystemStarter rm -rf $(DSTROOT)/usr/local/lib/system cp $(OBJROOT)/src/launchd $(SYMROOT) cp $(OBJROOT)/src/launchctl $(SYMROOT) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080326/0cdc23bc/attachment-0001.html From source_changes at macosforge.org Wed Mar 26 18:40:56 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Wed, 26 Mar 2008 18:40:56 -0700 (PDT) Subject: [launchd-changes] [23573] trunk/launchd/src/launchd_core_logic.c Message-ID: <20080327014056.7569B14F281C@beta.macosforge.org> Revision: 23573 http://trac.macosforge.org/projects/launchd/changeset/23573 Author: zarzycki at apple.com Date: 2008-03-26 18:40:55 -0700 (Wed, 26 Mar 2008) Log Message: ----------- Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-27 01:40:28 UTC (rev 23572) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-27 01:40:55 UTC (rev 23573) @@ -2238,7 +2238,13 @@ */ job_log_stray_pg(j); if (!j->abandon_pg) { - job_assumes(j, runtime_killpg(j->p, SIGTERM) != -1 || errno == ESRCH); + if (unlikely(runtime_killpg(j->p, SIGTERM) == -1 && errno != ESRCH)) { +#ifdef __LP64__ + job_log(j, LOG_APPLEONLY, "Bug: 5487498"); +#else + job_assumes(j, false); +#endif + } } /* -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080326/4af2faeb/attachment.html From source_changes at macosforge.org Thu Mar 27 14:18:34 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Thu, 27 Mar 2008 14:18:34 -0700 (PDT) Subject: [launchd-changes] [23574] trunk/launchd/src Message-ID: <20080327211834.4E27D150B17B@beta.macosforge.org> Revision: 23574 http://trac.macosforge.org/projects/launchd/changeset/23574 Author: zarzycki at apple.com Date: 2008-03-27 14:18:33 -0700 (Thu, 27 Mar 2008) Log Message: ----------- Need a darwin clean/dirty API Modified Paths: -------------- trunk/launchd/src/Makefile.am trunk/launchd/src/Makefile.in trunk/launchd/src/launchd.plist.5 trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/liblaunch_public.h trunk/launchd/src/libvproc.c trunk/launchd/src/libvproc_internal.h trunk/launchd/src/libvproc_private.h trunk/launchd/src/libvproc_public.h trunk/launchd/src/protocol_job.defs Modified: trunk/launchd/src/Makefile.am =================================================================== --- trunk/launchd/src/Makefile.am 2008-03-27 01:40:55 UTC (rev 23573) +++ trunk/launchd/src/Makefile.am 2008-03-27 21:18:33 UTC (rev 23574) @@ -1,5 +1,5 @@ CWARN = -Wall -Wextra -Waggregate-return -Wfloat-equal -Wshadow -Wpacked -Wmissing-prototypes -Wmissing-declarations -Werror # gcc4.2: -Wstrict-overflow=4 # -Wpadded -Wconversion -Wstrict-aliasing=2 -CTUNE = -fvisibility=hidden # gcc4.2: -fdiagnostics-show-option # -fstrict-aliasing +CTUNE = -fvisibility=hidden -freorder-blocks # gcc4.2: -fdiagnostics-show-option # -fstrict-aliasing CMISC = -isysroot $(SDKROOT) -F$(SDKROOT)/System/Library/PrivateFrameworks -D__MigTypeCheck=1 -Dmig_external=__private_extern__ -D_DARWIN_USE_64_BIT_INODE=1 AM_CFLAGS = $(CTUNE) $(CMISC) $(CWARN) AM_LDFLAGS = -Wl,-syslibroot,$(SDKROOT) @@ -57,7 +57,7 @@ SystemStarter_SOURCES = StartupItems.c IPC.c SystemStarter.c endif -launchd_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) -freorder-blocks +launchd_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) launchd_LDFLAGS = $(AM_LDFLAGS) -lbsm launchd_SOURCES = launchd.c launchd_core_logic.c launchd_unix_ipc.c protocol_vprocServer.c notifyServer.c launchd_internalUser.c launchd_internalServer.c job_replyUser.c launchd_runtime.c launchd_runtime_kill.c job_forwardUser.c mach_excServer.c Modified: trunk/launchd/src/Makefile.in =================================================================== --- trunk/launchd/src/Makefile.in 2008-03-27 01:40:55 UTC (rev 23573) +++ trunk/launchd/src/Makefile.in 2008-03-27 21:18:33 UTC (rev 23574) @@ -243,7 +243,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ CWARN = -Wall -Wextra -Waggregate-return -Wfloat-equal -Wshadow -Wpacked -Wmissing-prototypes -Wmissing-declarations -Werror # gcc4.2: -Wstrict-overflow=4 # -Wpadded -Wconversion -Wstrict-aliasing=2 -CTUNE = -fvisibility=hidden # gcc4.2: -fdiagnostics-show-option # -fstrict-aliasing +CTUNE = -fvisibility=hidden -freorder-blocks # gcc4.2: -fdiagnostics-show-option # -fstrict-aliasing CMISC = -isysroot $(SDKROOT) -F$(SDKROOT)/System/Library/PrivateFrameworks -D__MigTypeCheck=1 -Dmig_external=__private_extern__ -D_DARWIN_USE_64_BIT_INODE=1 AM_CFLAGS = $(CTUNE) $(CMISC) $(CWARN) AM_LDFLAGS = -Wl,-syslibroot,$(SDKROOT) @@ -262,7 +262,7 @@ @DO_EMBEDDED_MAGIC_FALSE@@LIBS_ONLY_FALSE at SystemStarter_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) @DO_EMBEDDED_MAGIC_FALSE@@LIBS_ONLY_FALSE at SystemStarter_LDFLAGS = $(AM_LDFLAGS) -framework CoreFoundation -framework IOKit @DO_EMBEDDED_MAGIC_FALSE@@LIBS_ONLY_FALSE at SystemStarter_SOURCES = StartupItems.c IPC.c SystemStarter.c - at LIBS_ONLY_FALSE@launchd_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) -freorder-blocks + at LIBS_ONLY_FALSE@launchd_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) @LIBS_ONLY_FALSE at launchd_LDFLAGS = $(AM_LDFLAGS) -lbsm @LIBS_ONLY_FALSE at launchd_SOURCES = launchd.c launchd_core_logic.c launchd_unix_ipc.c protocol_vprocServer.c notifyServer.c launchd_internalUser.c launchd_internalServer.c job_replyUser.c launchd_runtime.c launchd_runtime_kill.c job_forwardUser.c mach_excServer.c @LIBS_ONLY_FALSE at launchproxy_LDFLAGS = $(AM_LDFLAGS) $(LIBS_SECURITY) Modified: trunk/launchd/src/launchd.plist.5 =================================================================== --- trunk/launchd/src/launchd.plist.5 2008-03-27 01:40:55 UTC (rev 23573) +++ trunk/launchd/src/launchd.plist.5 2008-03-27 21:18:33 UTC (rev 23574) @@ -123,6 +123,16 @@ to use the .Xr glob 3 mechanism to update the program arguments before invocation. +.It Sy EnableTransactions +This flag instructs +.Nm launchd +that the job promises to use +.Xr vproc_transaction_begin 3 +and +.Xr vproc_transaction_end 3 +to track outstanding transactions that need to be reconciled before the process can safely terminate. If no outstanding transactions are in progress, then +.Nm launchd +is free to send the SIGKILL signal. .It Sy OnDemand This key was used in Mac OS X 10.4 to control whether a job was kept alive or not. The default was true. This key has been deprecated and replaced in Mac OS X 10.5 with the more powerful KeepAlive option. Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-27 01:40:55 UTC (rev 23573) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-27 21:18:33 UTC (rev 23574) @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -360,6 +361,7 @@ char *stdoutpath; char *stderrpath; char *alt_exc_handler; + struct vproc_shmem_s *shmem; struct machservice *lastlookup; unsigned int lastlookup_gennum; #if HAVE_SANDBOX @@ -384,14 +386,14 @@ uint64_t start_time; uint32_t min_run_time; uint32_t start_interval; - unsigned short checkedin:1, anonymous:1, debug:1, inetcompat:1, inetcompat_wait:1, + bool checkedin:1, anonymous:1, debug:1, inetcompat:1, inetcompat_wait:1, ondemand:1, session_create:1, low_pri_io:1, no_init_groups:1, priv_port_has_senders:1, importing_global_env:1, importing_hard_limits:1, setmask:1, legacy_mach_job:1, start_pending:1, globargv:1, wait4debugger:1, internal_exc_handler:1, stall_before_exec:1, only_once:1, currently_ignored:1, forced_peers_to_demand_mode:1, setnice:1, hopefully_exits_last:1, removal_pending:1, legacy_LS_job:1, sent_sigkill:1, debug_before_kill:1, weird_bootstrap:1, start_on_mount:1, per_user:1, hopefully_exits_first:1, deny_unknown_mslookups:1, unload_at_mig_return:1, abandon_pg:1, - poll_for_vfs_changes:1, deny_job_creation:1, __junk:11; + poll_for_vfs_changes:1, deny_job_creation:1, kill_via_shmem:1, sent_kill_via_shmem:1; mode_t mask; const char label[0]; }; @@ -561,19 +563,40 @@ INTERNAL_ABI void job_stop(job_t j) { + int32_t newval = 1; + if (unlikely(!j->p || j->anonymous)) { return; } - job_assumes(j, runtime_kill(j->p, SIGTERM) != -1); + if (j->kill_via_shmem) { + if (j->shmem) { + if (!j->sent_kill_via_shmem) { + j->shmem->vp_shmem_flags |= VPROC_SHMEM_EXITING; + newval = __sync_sub_and_fetch(&j->shmem->vp_shmem_transaction_cnt, 1); + j->sent_kill_via_shmem = true; + } else { + newval = j->shmem->vp_shmem_transaction_cnt; + } + } else { + newval = -1; + } + } + j->sent_sigterm_time = runtime_get_opaque_time(); - if (j->exit_timeout) { - job_assumes(j, kevent_mod((uintptr_t)&j->exit_timeout, EVFILT_TIMER, - EV_ADD|EV_ONESHOT, NOTE_SECONDS, j->exit_timeout, j) != -1); + if (newval < 0) { + job_kill(j); + } else { + job_assumes(j, runtime_kill(j->p, SIGTERM) != -1); + + if (j->exit_timeout) { + job_assumes(j, kevent_mod((uintptr_t)&j->exit_timeout, EVFILT_TIMER, + EV_ADD|EV_ONESHOT, NOTE_SECONDS, j->exit_timeout, j) != -1); + } + + job_log(j, LOG_DEBUG, "Sent SIGTERM signal"); } - - job_log(j, LOG_DEBUG, "Sent SIGTERM signal"); } INTERNAL_ABI launch_data_t @@ -1453,6 +1476,9 @@ if (strcasecmp(key, LAUNCH_JOBKEY_ENABLEGLOBBING) == 0) { j->globargv = value; found_key = true; + } else if (strcasecmp(key, LAUNCH_JOBKEY_ENABLETRANSACTIONS) == 0) { + j->kill_via_shmem = value; + found_key = true; } else if (strcasecmp(key, LAUNCH_JOBKEY_ENTERKERNELDEBUGGERBEFOREKILL) == 0) { j->debug_before_kill = value; found_key = true; @@ -2203,6 +2229,10 @@ job_log(j, LOG_DEBUG, "Reaping"); + if (j->shmem) { + job_assumes(j, munmap(j->shmem, getpagesize()) == 0); + } + if (unlikely(j->weird_bootstrap)) { mach_msg_size_t mxmsgsz = sizeof(union __RequestUnion__job_mig_protocol_vproc_subsystem); @@ -2335,6 +2365,7 @@ } j->last_exit_status = status; j->sent_sigkill = false; + j->sent_kill_via_shmem = false; j->p = 0; /* @@ -5402,6 +5433,36 @@ } kern_return_t +job_mig_setup_shmem(job_t j, mach_port_t *shmem_port) +{ + memory_object_size_t size_of_page, size_of_page_orig; + kern_return_t kr; + + if (!launchd_assumes(j != NULL)) { + return BOOTSTRAP_NO_MEMORY; + } + + if (unlikely(j->anonymous)) { + return BOOTSTRAP_NOT_PRIVILEGED; + } + + size_of_page_orig = size_of_page = getpagesize(); + + if (!job_assumes(j, j->shmem = mmap(NULL, size_of_page, PROT_READ|PROT_WRITE, MAP_ANON, -1, 0))) { + return BOOTSTRAP_NO_MEMORY; + } + + kr = mach_make_memory_entry_64(mach_task_self(), &size_of_page, + (memory_object_offset_t)((long)j->shmem), VM_PROT_DEFAULT, shmem_port, 0); + + if (job_assumes(j, kr == 0)) { + job_assumes(j, size_of_page == size_of_page_orig); + } + + return kr; +} + +kern_return_t job_mig_create_server(job_t j, cmd_t server_cmd, uid_t server_uid, boolean_t on_demand, mach_port_t *server_portp) { struct ldcred *ldc = runtime_get_caller_creds(); Modified: trunk/launchd/src/liblaunch_public.h =================================================================== --- trunk/launchd/src/liblaunch_public.h 2008-03-27 01:40:55 UTC (rev 23573) +++ trunk/launchd/src/liblaunch_public.h 2008-03-27 21:18:33 UTC (rev 23574) @@ -101,6 +101,7 @@ #define LAUNCH_JOBKEY_LAUNCHONLYONCE "LaunchOnlyOnce" #define LAUNCH_JOBKEY_ABANDONPROCESSGROUP "AbandonProcessGroup" #define LAUNCH_JOBKEY_POLICIES "Policies" +#define LAUNCH_JOBKEY_ENABLETRANSACTIONS "EnableTransactions" #define LAUNCH_JOBPOLICY_DENYCREATINGOTHERJOBS "DenyCreatingOtherJobs" Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2008-03-27 01:40:55 UTC (rev 23573) +++ trunk/launchd/src/libvproc.c 2008-03-27 21:18:33 UTC (rev 23574) @@ -32,6 +32,7 @@ #include #include #include +#include #if HAVE_QUARANTINE #include #endif @@ -44,10 +45,142 @@ #include "reboot2.h" +#define likely(x) __builtin_expect((bool)(x), true) +#define unlikely(x) __builtin_expect((bool)(x), false) + static mach_port_t get_root_bootstrap_port(void); +const char *__crashreporter_info__; /* this should get merged with other versions of the symbol */ + static int64_t cached_pid = -1; +static struct vproc_shmem_s *vproc_shmem; +static void +vproc_shmem_init(void) +{ + vm_address_t vm_addr = 0; + mach_port_t shmem_port; + kern_return_t kr; + + kr = vproc_mig_setup_shmem(bootstrap_port, &shmem_port); + + if (unlikely(kr)) { + abort(); + } + + kr = vm_map_64(mach_task_self(), &vm_addr, getpagesize(), 0, true, shmem_port, 0, false, + VM_PROT_READ|VM_PROT_WRITE, VM_PROT_READ|VM_PROT_WRITE, VM_INHERIT_NONE); + + if (unlikely(kr)) { + abort(); + } + + vproc_shmem = (struct vproc_shmem_s *)vm_addr; +} + +vproc_transaction_t +vproc_transaction_begin(vproc_t vp __attribute__((unused))) +{ + vproc_transaction_t vpt = (vproc_transaction_t)vproc_shmem_init; /* we need a "random" variable that is testable */ + + _basic_vproc_transaction_begin(); + + return vpt; +} + +void +_basic_vproc_transaction_begin(void) +{ + int64_t newval; + + if (unlikely(vproc_shmem == NULL)) { + vproc_shmem_init(); + if (vproc_shmem == NULL) { + return; + } + } + + newval = __sync_add_and_fetch(&vproc_shmem->vp_shmem_transaction_cnt, 1); + + if (unlikely(newval < 1)) { + if (vproc_shmem->vp_shmem_flags & VPROC_SHMEM_EXITING) { + raise(SIGKILL); + __crashreporter_info__ = "raise(SIGKILL) failed"; + } else { + __crashreporter_info__ = "Unbalanced: vproc_transaction_begin()"; + } + abort(); + } +} + +void +vproc_transaction_end(vproc_t vp __attribute__((unused)), vproc_transaction_t vpt) +{ + if (unlikely(vpt != (vproc_transaction_t)vproc_shmem_init)) { + __crashreporter_info__ = "Bogus transaction handle passed to vproc_transaction_end() "; + abort(); + } + + _basic_vproc_transaction_end(); +} + +void +_basic_vproc_transaction_end(void) +{ + int32_t newval = __sync_sub_and_fetch(&vproc_shmem->vp_shmem_transaction_cnt, 1); + + if (unlikely(newval < 0)) { + if (vproc_shmem->vp_shmem_flags & VPROC_SHMEM_EXITING) { + raise(SIGKILL); + __crashreporter_info__ = "raise(SIGKILL) failed"; + } else { + __crashreporter_info__ = "Unbalanced: vproc_transaction_end()"; + } + abort(); + } +} + +vproc_standby_t +vproc_standby_begin(vproc_t vp __attribute__((unused))) +{ + vproc_standby_t vpsb = (vproc_standby_t)vproc_shmem_init; /* we need a "random" variable that is testable */ + int64_t newval; + + if (unlikely(vproc_shmem == NULL)) { + vproc_shmem_init(); + if (vproc_shmem == NULL) { + return NULL; + } + } + + newval = __sync_add_and_fetch(&vproc_shmem->vp_shmem_standby_cnt, 1); + + if (unlikely(newval < 1)) { + __crashreporter_info__ = "Unbalanced: vproc_standby_begin()"; + abort(); + } + + return vpsb; +} + +void +vproc_standby_end(vproc_t vp __attribute__((unused)), vproc_standby_t vpt) +{ + int32_t newval; + + if (unlikely(vpt != (vproc_standby_t)vproc_shmem_init)) { + __crashreporter_info__ = "Bogus standby handle passed to vproc_standby_end() "; + abort(); + } + + newval = __sync_sub_and_fetch(&vproc_shmem->vp_shmem_standby_cnt, 1); + + if (unlikely(newval < 0)) { + __crashreporter_info__ = "Unbalanced: vproc_standby_end()"; + abort(); + } +} + kern_return_t _vproc_grab_subset(mach_port_t bp, mach_port_t *reqport, mach_port_t *rcvright, launch_data_t *outval, mach_port_array_t *ports, mach_msg_type_number_t *portCnt) Modified: trunk/launchd/src/libvproc_internal.h =================================================================== --- trunk/launchd/src/libvproc_internal.h 2008-03-27 01:40:55 UTC (rev 23573) +++ trunk/launchd/src/libvproc_internal.h 2008-03-27 21:18:33 UTC (rev 23574) @@ -33,6 +33,14 @@ typedef pid_t * pid_array_t; typedef mach_port_t vproc_mig_t; +#define VPROC_SHMEM_EXITING 0x1 + +struct vproc_shmem_s { + int32_t vp_shmem_transaction_cnt; + int32_t vp_shmem_standby_cnt; + int32_t vp_shmem_flags; +}; + #ifdef protocol_vproc_MSG_COUNT /* HACK */ #include "launchd_core_logic.h" Modified: trunk/launchd/src/libvproc_private.h =================================================================== --- trunk/launchd/src/libvproc_private.h 2008-03-27 01:40:55 UTC (rev 23573) +++ trunk/launchd/src/libvproc_private.h 2008-03-27 21:18:33 UTC (rev 23574) @@ -76,6 +76,9 @@ vproc_err_t _vprocmgr_move_subset_to_user(uid_t target_user, const char *session_type); +void _basic_vproc_transaction_begin(void); +void _basic_vproc_transaction_end(void); + #pragma GCC visibility pop __END_DECLS Modified: trunk/launchd/src/libvproc_public.h =================================================================== --- trunk/launchd/src/libvproc_public.h 2008-03-27 01:40:55 UTC (rev 23573) +++ trunk/launchd/src/libvproc_public.h 2008-03-27 21:18:33 UTC (rev 23574) @@ -67,8 +67,8 @@ * * launchd jobs should update their property lists accordingly. * - * LaunchServices uses private methods to coordinate whether GUI applications - * have opted into this design. + * We plan to have LaunchServices use private methods to coordinate + * whether GUI applications have opted into this design. */ /*! @@ -80,22 +80,28 @@ typedef struct vproc_transaction_s *vproc_transaction_t; /*! - * @function vproc_transaction_prepare + * @function vproc_transaction_begin * + * @param virtual_proc + * This is meant for future API improvements. Pass NULL for now. + * * @result - * Returns an opaque handle to be passed to vproc_transaction_complete(). + * Returns an opaque handle to be passed to vproc_transaction_end(). * * @abstract * Call this API before creating data that needs to be saved via I/O later. */ vproc_transaction_t -vproc_transaction_prepare(void); +vproc_transaction_begin(vproc_t virtual_proc); /*! - * @function vproc_transaction_complete + * @function vproc_transaction_end * + * @param virtual_proc + * This is meant for future API improvements. Pass NULL for now. + * * @param handle - * The handle previously created with vproc_transaction_prepare(). + * The handle previously created with vproc_transaction_begin(). * * @abstract * Call this API after the data has either been flushed or otherwise resolved. @@ -104,7 +110,7 @@ * Calling this API with the same handle more than once is undefined. */ void -vproc_transaction_complete(vproc_transaction_t handle); +vproc_transaction_end(vproc_t virtual_proc, vproc_transaction_t handle); /*! * @typedef vproc_standby_t @@ -115,23 +121,29 @@ typedef struct vproc_standby_s *vproc_standby_t; /*! - * @function vproc_standby_prepare + * @function vproc_standby_begin * + * @param virtual_proc + * This is meant for future API improvements. Pass NULL for now. + * * @result - * Returns an opaque handle to be passed to vproc_standby_complete(). + * Returns an opaque handle to be passed to vproc_standby_end(). * * @abstract * Call this API before registering notifications. For example: timers network * state change, or when monitoring keyboard/mouse events. */ vproc_standby_t -vproc_standby_prepare(void); +vproc_standby_begin(vproc_t virtual_proc); /*! - * @function vproc_standby_complete + * @function vproc_standby_end * + * @param virtual_proc + * This is meant for future API improvements. Pass NULL for now. + * * @param handle - * The handle previously created with vproc_standby_prepare(). + * The handle previously created with vproc_standby_begin(). * * @abstract * Call this API when deregistering notifications. @@ -140,7 +152,7 @@ * Calling this API with the same handle more than once is undefined. */ void -vproc_standby_complete(vproc_standby_t handle); +vproc_standby_end(vproc_t virtual_proc, vproc_standby_t handle); #pragma GCC visibility pop Modified: trunk/launchd/src/protocol_job.defs =================================================================== --- trunk/launchd/src/protocol_job.defs 2008-03-27 01:40:55 UTC (rev 23573) +++ trunk/launchd/src/protocol_job.defs 2008-03-27 21:18:33 UTC (rev 23574) @@ -95,7 +95,9 @@ __requestor_port: mach_port_t; out __subset_port : mach_port_make_send_t); -skip; /* create_service prior to 10.6 */ +routine setup_shmem( + __bs_port : job_t; + out __shmem_port : mach_port_move_send_t); routine take_subset( __bs_port : job_t; -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080327/dbfcd375/attachment-0001.html From source_changes at macosforge.org Thu Mar 27 14:40:33 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Thu, 27 Mar 2008 14:40:33 -0700 (PDT) Subject: [launchd-changes] [23575] branches/SULeopard/launchd/src/launchd_core_logic.c Message-ID: <20080327214033.7A3BC150B4C9@beta.macosforge.org> Revision: 23575 http://trac.macosforge.org/projects/launchd/changeset/23575 Author: zarzycki at apple.com Date: 2008-03-27 14:40:32 -0700 (Thu, 27 Mar 2008) Log Message: ----------- 10.5.3 Regression: 9D8: After installing Final Cut Studio 2, machine fails to restart Modified Paths: -------------- branches/SULeopard/launchd/src/launchd_core_logic.c Modified: branches/SULeopard/launchd/src/launchd_core_logic.c =================================================================== --- branches/SULeopard/launchd/src/launchd_core_logic.c 2008-03-27 21:18:33 UTC (rev 23574) +++ branches/SULeopard/launchd/src/launchd_core_logic.c 2008-03-27 21:40:32 UTC (rev 23575) @@ -3916,7 +3916,7 @@ * We definitely need to revisit this after Leopard ships. Please see * launchctl.c for the other half of this hack. */ - if (j->mgr->global_on_demand_cnt > 0 && strcmp(j->label, "com.apple.kextd") != 0) { + if ((j->mgr->shutting_down || j->mgr->global_on_demand_cnt > 0) && strcmp(j->label, "com.apple.kextd") != 0) { return false; } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080327/46185c39/attachment.html From source_changes at macosforge.org Thu Mar 27 14:42:31 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Thu, 27 Mar 2008 14:42:31 -0700 (PDT) Subject: [launchd-changes] [23576] trunk/launchd/src/launchd_core_logic.c Message-ID: <20080327214231.F37A9150B562@beta.macosforge.org> Revision: 23576 http://trac.macosforge.org/projects/launchd/changeset/23576 Author: zarzycki at apple.com Date: 2008-03-27 14:42:31 -0700 (Thu, 27 Mar 2008) Log Message: ----------- 10.5.3 Regression: 9D8: After installing Final Cut Studio 2, machine fails to restart Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-27 21:40:32 UTC (rev 23575) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-27 21:42:31 UTC (rev 23576) @@ -4128,7 +4128,7 @@ * We definitely need to revisit this after Leopard ships. Please see * launchctl.c for the other half of this hack. */ - if (unlikely(j->mgr->global_on_demand_cnt > 0 && is_not_kextd)) { + if (unlikely((j->mgr->shutting_down || j->mgr->global_on_demand_cnt > 0) && is_not_kextd)) { return false; } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080327/3838f663/attachment.html From source_changes at macosforge.org Thu Mar 27 14:57:52 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Thu, 27 Mar 2008 14:57:52 -0700 (PDT) Subject: [launchd-changes] [23577] trunk/launchd/src Message-ID: <20080327215752.24C5E150B695@beta.macosforge.org> Revision: 23577 http://trac.macosforge.org/projects/launchd/changeset/23577 Author: zarzycki at apple.com Date: 2008-03-27 14:57:51 -0700 (Thu, 27 Mar 2008) Log Message: ----------- Refinements. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/libvproc.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-27 21:42:31 UTC (rev 23576) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-27 21:57:51 UTC (rev 23577) @@ -2231,6 +2231,7 @@ if (j->shmem) { job_assumes(j, munmap(j->shmem, getpagesize()) == 0); + j->shmem = NULL; } if (unlikely(j->weird_bootstrap)) { @@ -5446,6 +5447,11 @@ return BOOTSTRAP_NOT_PRIVILEGED; } + if (unlikely(j->shmem)) { + job_log(j, LOG_ERR, "Tried to setup shared memory more than once"); + return BOOTSTRAP_NOT_PRIVILEGED; + } + size_of_page_orig = size_of_page = getpagesize(); if (!job_assumes(j, j->shmem = mmap(NULL, size_of_page, PROT_READ|PROT_WRITE, MAP_ANON, -1, 0))) { Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2008-03-27 21:42:31 UTC (rev 23576) +++ trunk/launchd/src/libvproc.c 2008-03-27 21:57:51 UTC (rev 23577) @@ -54,6 +54,7 @@ static int64_t cached_pid = -1; static struct vproc_shmem_s *vproc_shmem; +static pthread_once_t shmem_inited = PTHREAD_ONCE_INIT; static void vproc_shmem_init(void) @@ -94,8 +95,8 @@ int64_t newval; if (unlikely(vproc_shmem == NULL)) { - vproc_shmem_init(); - if (vproc_shmem == NULL) { + int po_r = pthread_once(&shmem_inited, vproc_shmem_init); + if (po_r != 0 || vproc_shmem == NULL) { return; } } @@ -147,8 +148,8 @@ int64_t newval; if (unlikely(vproc_shmem == NULL)) { - vproc_shmem_init(); - if (vproc_shmem == NULL) { + int po_r = pthread_once(&shmem_inited, vproc_shmem_init); + if (po_r != 0 || vproc_shmem == NULL) { return NULL; } } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080327/9ac64da2/attachment.html From source_changes at macosforge.org Thu Mar 27 15:48:07 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Thu, 27 Mar 2008 15:48:07 -0700 (PDT) Subject: [launchd-changes] [23578] trunk/launchd/src Message-ID: <20080327224807.85119150B937@beta.macosforge.org> Revision: 23578 http://trac.macosforge.org/projects/launchd/changeset/23578 Author: zarzycki at apple.com Date: 2008-03-27 15:48:06 -0700 (Thu, 27 Mar 2008) Log Message: ----------- Last minute changes. Modified Paths: -------------- trunk/launchd/src/libvproc.c trunk/launchd/src/libvproc_private.h Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2008-03-27 21:57:51 UTC (rev 23577) +++ trunk/launchd/src/libvproc.c 2008-03-27 22:48:06 UTC (rev 23578) @@ -92,7 +92,7 @@ void _basic_vproc_transaction_begin(void) { - int64_t newval; + typeof(vproc_shmem->vp_shmem_transaction_cnt) newval; if (unlikely(vproc_shmem == NULL)) { int po_r = pthread_once(&shmem_inited, vproc_shmem_init); @@ -114,7 +114,31 @@ } } +size_t +_basic_vproc_transaction_count(void) +{ + return likely(vproc_shmem) ? vproc_shmem->vp_shmem_transaction_cnt : INT32_MAX; +} + void +_basic_vproc_transaction_try_exit(int status) +{ + typeof(vproc_shmem->vp_shmem_transaction_cnt) newval; + + if (unlikely(vproc_shmem == NULL)) { + return; + } + + vproc_shmem->vp_shmem_flags |= VPROC_SHMEM_EXITING; + + newval = __sync_sub_and_fetch(&vproc_shmem->vp_shmem_transaction_cnt, 1); + + if (newval < 0) { + _exit(status); + } +} + +void vproc_transaction_end(vproc_t vp __attribute__((unused)), vproc_transaction_t vpt) { if (unlikely(vpt != (vproc_transaction_t)vproc_shmem_init)) { @@ -128,8 +152,10 @@ void _basic_vproc_transaction_end(void) { - int32_t newval = __sync_sub_and_fetch(&vproc_shmem->vp_shmem_transaction_cnt, 1); + typeof(vproc_shmem->vp_shmem_transaction_cnt) newval; + newval = __sync_sub_and_fetch(&vproc_shmem->vp_shmem_transaction_cnt, 1); + if (unlikely(newval < 0)) { if (vproc_shmem->vp_shmem_flags & VPROC_SHMEM_EXITING) { raise(SIGKILL); @@ -145,7 +171,7 @@ vproc_standby_begin(vproc_t vp __attribute__((unused))) { vproc_standby_t vpsb = (vproc_standby_t)vproc_shmem_init; /* we need a "random" variable that is testable */ - int64_t newval; + typeof(vproc_shmem->vp_shmem_standby_cnt) newval; if (unlikely(vproc_shmem == NULL)) { int po_r = pthread_once(&shmem_inited, vproc_shmem_init); @@ -167,7 +193,7 @@ void vproc_standby_end(vproc_t vp __attribute__((unused)), vproc_standby_t vpt) { - int32_t newval; + typeof(vproc_shmem->vp_shmem_standby_cnt) newval; if (unlikely(vpt != (vproc_standby_t)vproc_shmem_init)) { __crashreporter_info__ = "Bogus standby handle passed to vproc_standby_end() "; Modified: trunk/launchd/src/libvproc_private.h =================================================================== --- trunk/launchd/src/libvproc_private.h 2008-03-27 21:57:51 UTC (rev 23577) +++ trunk/launchd/src/libvproc_private.h 2008-03-27 22:48:06 UTC (rev 23578) @@ -78,7 +78,10 @@ void _basic_vproc_transaction_begin(void); void _basic_vproc_transaction_end(void); +size_t _basic_vproc_transaction_count(void); +void _basic_vproc_transaction_try_exit(int status); + #pragma GCC visibility pop __END_DECLS -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080327/2a4c4972/attachment-0001.html From source_changes at macosforge.org Thu Mar 27 15:56:24 2008 From: source_changes at macosforge.org (source_changes at macosforge.org) Date: Thu, 27 Mar 2008 15:56:24 -0700 (PDT) Subject: [launchd-changes] [23579] tags/launchd-258.11/ Message-ID: <20080327225624.65392150B97E@beta.macosforge.org> Revision: 23579 http://trac.macosforge.org/projects/launchd/changeset/23579 Author: zarzycki at apple.com Date: 2008-03-27 15:56:23 -0700 (Thu, 27 Mar 2008) Log Message: ----------- "Tagging launchd-258.11 from https://svn.macosforge.org/repository/launchd/branches/SULeopard" Added Paths: ----------- tags/launchd-258.11/ Copied: tags/launchd-258.11 (from rev 23578, branches/SULeopard) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080327/c4b93e0a/attachment.html From source_changes at macosforge.org Fri Mar 28 12:47:55 2008 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Fri Mar 28 12:48:56 2008 Subject: [launchd-changes] [23580] trunk/launchd/src Message-ID: <20080328194755.6850B15166A3@beta.macosforge.org> Revision: 23580 http://trac.macosforge.org/projects/launchd/changeset/23580 Author: zarzycki@apple.com Date: 2008-03-28 12:47:54 -0700 (Fri, 28 Mar 2008) Log Message: ----------- Have launchd use the kill-via-shmem trick. Modified Paths: -------------- trunk/launchd/src/launchd.c trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/launchd_runtime.c trunk/launchd/src/launchd_runtime.h trunk/launchd/src/libvproc.c trunk/launchd/src/libvproc_internal.h trunk/launchd/src/libvproc_private.h Modified: trunk/launchd/src/launchd.c =================================================================== --- trunk/launchd/src/launchd.c 2008-03-27 22:56:23 UTC (rev 23579) +++ trunk/launchd/src/launchd.c 2008-03-28 19:47:54 UTC (rev 23580) @@ -70,6 +70,7 @@ #include "libbootstrap_public.h" #include "libvproc_public.h" +#include "libvproc_private.h" #include "libvproc_internal.h" #include "liblaunch_public.h" @@ -158,6 +159,10 @@ if (pid1_magic) { handle_pid1_crashes_separately(); + } else { + /* prime shared memory before the 'bootstrap_port' global is set to zero */ + _vproc_transaction_begin(); + _vproc_transaction_end(); } jobmgr_init(sflag); Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2008-03-27 22:56:23 UTC (rev 23579) +++ trunk/launchd/src/launchd_core_logic.c 2008-03-28 19:47:54 UTC (rev 23580) @@ -563,6 +563,7 @@ INTERNAL_ABI void job_stop(job_t j) { + char extralog[100]; int32_t newval = 1; if (unlikely(!j->p || j->anonymous)) { @@ -595,7 +596,13 @@ EV_ADD|EV_ONESHOT, NOTE_SECONDS, j->exit_timeout, j) != -1); } - job_log(j, LOG_DEBUG, "Sent SIGTERM signal"); + if (j->kill_via_shmem) { + snprintf(extralog, sizeof(extralog), ": %d remaining transactions", j->shmem->vp_shmem_transaction_cnt + 1); + } else { + extralog[0] = '\0'; + } + + job_log(j, LOG_DEBUG, "Sent SIGTERM signal%s", extralog); } } @@ -803,7 +810,7 @@ } if (jm->parentmgr) { - runtime_del_ref(); + runtime_del_weak_ref(); SLIST_REMOVE(&jm->parentmgr->submgrs, jm, jobmgr_s, sle); } else if (pid1_magic) { jobmgr_log(jm, LOG_DEBUG, "About to call: sync()"); @@ -959,7 +966,7 @@ free(j->j_binpref); } if (j->start_interval) { - runtime_del_ref(); + runtime_del_weak_ref(); job_assumes(j, kevent_mod((uintptr_t)&j->start_interval, EVFILT_TIMER, EV_DELETE, 0, 0, NULL) != -1); } if (j->poll_for_vfs_changes) { @@ -1664,7 +1671,7 @@ } else if (unlikely(value > UINT32_MAX)) { job_log(j, LOG_WARNING, "%s is too large. Ignoring.", LAUNCH_JOBKEY_STARTINTERVAL); } else { - runtime_add_ref(); + runtime_add_weak_ref(); j->start_interval = value; job_assumes(j, kevent_mod((uintptr_t)&j->start_interval, EVFILT_TIMER, EV_ADD, NOTE_SECONDS, value, j) != -1); @@ -2230,7 +2237,7 @@ job_log(j, LOG_DEBUG, "Reaping"); if (j->shmem) { - job_assumes(j, munmap(j->shmem, getpagesize()) == 0); + job_assumes(j, vm_deallocate(mach_task_self(), (vm_address_t)j->shmem, getpagesize()) == 0); j->shmem = NULL; } @@ -3791,7 +3798,7 @@ calendarinterval_setalarm(j, ci); - runtime_add_ref(); + runtime_add_weak_ref(); return true; } @@ -3804,7 +3811,7 @@ free(ci); - runtime_del_ref(); + runtime_del_weak_ref(); } void @@ -3862,7 +3869,7 @@ SLIST_INSERT_HEAD(&j->sockets, sg, sle); - runtime_add_ref(); + runtime_add_weak_ref(); return true; } @@ -3893,7 +3900,7 @@ free(sg->fds); free(sg); - runtime_del_ref(); + runtime_del_weak_ref(); } void @@ -4729,7 +4736,7 @@ } if (jmr->parentmgr) { - runtime_add_ref(); + runtime_add_weak_ref(); } return jmr; @@ -5169,9 +5176,9 @@ } if (add) { - runtime_add_ref(); + runtime_add_weak_ref(); } else { - runtime_del_ref(); + runtime_del_weak_ref(); } } @@ -5437,6 +5444,7 @@ job_mig_setup_shmem(job_t j, mach_port_t *shmem_port) { memory_object_size_t size_of_page, size_of_page_orig; + vm_address_t vm_addr; kern_return_t kr; if (!launchd_assumes(j != NULL)) { @@ -5444,6 +5452,7 @@ } if (unlikely(j->anonymous)) { + job_log(j, LOG_ERR, "Anonymous job tried to setup shared memory"); return BOOTSTRAP_NOT_PRIVILEGED; } @@ -5454,17 +5463,25 @@ size_of_page_orig = size_of_page = getpagesize(); - if (!job_assumes(j, j->shmem = mmap(NULL, size_of_page, PROT_READ|PROT_WRITE, MAP_ANON, -1, 0))) { - return BOOTSTRAP_NO_MEMORY; + kr = vm_allocate(mach_task_self(), &vm_addr, size_of_page, true); + + if (!job_assumes(j, kr == 0)) { + return kr; } + j->shmem = (typeof(j->shmem))vm_addr; + j->shmem->vp_shmem_standby_timeout = j->timeout; + kr = mach_make_memory_entry_64(mach_task_self(), &size_of_page, - (memory_object_offset_t)((long)j->shmem), VM_PROT_DEFAULT, shmem_port, 0); + (memory_object_offset_t)vm_addr, VM_PROT_READ|VM_PROT_WRITE, shmem_port, 0); if (job_assumes(j, kr == 0)) { job_assumes(j, size_of_page == size_of_page_orig); } + /* no need to inherit this in child processes */ + job_assumes(j, vm_inherit(mach_task_self(), (vm_address_t)j->shmem, size_of_page_orig, VM_INHERIT_NONE) == 0); + return kr; } @@ -5776,7 +5793,7 @@ kr = 1; } else if (inval) { if (j->start_interval == 0) { - runtime_add_ref(); + runtime_add_weak_ref(); } else { /* Workaround 5225889 */ job_assumes(j, kevent_mod((uintptr_t)&j->start_interval, EVFILT_TIMER, EV_DELETE, 0, 0, j) != -1); @@ -5786,7 +5803,7 @@ } else if (j->start_interval) { job_assumes(j, kevent_mod((uintptr_t)&j->start_interval, EVFILT_TIMER, EV_DELETE, 0, 0, NULL) != -1); if (j->start_interval != 0) { - runtime_del_ref(); + runtime_del_weak_ref(); } j->start_interval = 0; } @@ -6014,6 +6031,7 @@ ji->mach_uid = which_user; ji->per_user = true; + ji->kill_via_shmem = true; if ((ms = machservice_new(ji, lbuf, up_cont, false)) == NULL) { job_remove(ji); Modified: trunk/launchd/src/launchd_runtime.c =================================================================== --- trunk/launchd/src/launchd_runtime.c 2008-03-27 22:56:23 UTC (rev 23579) +++ trunk/launchd/src/launchd_runtime.c 2008-03-28 19:47:54 UTC (rev 23580) @@ -69,6 +69,8 @@ #include "launch.h" #include "launchd.h" #include "launchd_core_logic.h" +#include "libvproc_public.h" +#include "libvproc_private.h" #include "libvproc_internal.h" #include "job_reply.h" @@ -99,6 +101,7 @@ static mach_msg_timeout_t runtime_idle_timeout; static struct ldcred ldc; static size_t runtime_busy_cnt; +static size_t runtime_standby_cnt; static STAILQ_HEAD(, logmsg_s) logmsg_queue = STAILQ_HEAD_INITIALIZER(logmsg_queue); @@ -989,6 +992,7 @@ mig_callback the_demux; mach_msg_timeout_t to; mach_msg_return_t mr; + size_t busy_cnt; options = MACH_RCV_MSG|MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_AUDIT) | MACH_RCV_TRAILER_TYPE(MACH_MSG_TRAILER_FORMAT_0); @@ -996,6 +1000,7 @@ tmp_options = options; for (;;) { + busy_cnt = runtime_busy_cnt + runtime_standby_cnt; to = MACH_MSG_TIMEOUT_NONE; if (unlikely(msg_size != max_msg_size)) { @@ -1007,11 +1012,11 @@ } } - if ((tmp_options & MACH_RCV_MSG) && (runtime_idle_callback || (runtime_busy_cnt == 0))) { + if ((tmp_options & MACH_RCV_MSG) && (runtime_idle_callback || (busy_cnt == 0))) { tmp_options |= MACH_RCV_TIMEOUT; if (!(tmp_options & MACH_SEND_TIMEOUT)) { - to = runtime_busy_cnt ? runtime_idle_timeout : (RUNTIME_ADVISABLE_IDLE_TIMEOUT * 1000); + to = busy_cnt ? runtime_idle_timeout : (_vproc_standby_timeout() * 1000); } } @@ -1033,7 +1038,7 @@ continue; case MACH_RCV_TIMED_OUT: if (to != MACH_MSG_TIMEOUT_NONE) { - if (runtime_busy_cnt == 0) { + if (busy_cnt == 0) { launchd_shutdown(); } else if (runtime_idle_callback) { runtime_idle_callback(); @@ -1477,15 +1482,39 @@ INTERNAL_ABI void runtime_add_ref(void) { + if (!pid1_magic) { + _vproc_transaction_begin(); + } runtime_busy_cnt++; } INTERNAL_ABI void runtime_del_ref(void) { + if (!pid1_magic) { + _vproc_transaction_end(); + } runtime_busy_cnt--; } +INTERNAL_ABI void +runtime_add_weak_ref(void) +{ + if (!pid1_magic) { + _vproc_standby_begin(); + } + runtime_standby_cnt++; +} + +INTERNAL_ABI void +runtime_del_weak_ref(void) +{ + if (!pid1_magic) { + _vproc_standby_end(); + } + runtime_standby_cnt--; +} + kern_return_t catch_mach_exception_raise(mach_port_t exception_port __attribute__((unused)), mach_port_t thread, mach_port_t task, exception_type_t exception, mach_exception_data_t code, mach_msg_type_number_t codeCnt) Modified: trunk/launchd/src/launchd_runtime.h =================================================================== --- trunk/launchd/src/launchd_runtime.h 2008-03-27 22:56:23 UTC (rev 23579) +++ trunk/launchd/src/launchd_runtime.h 2008-03-28 19:47:54 UTC (rev 23580) @@ -111,6 +111,8 @@ INTERNAL_ABI void runtime_add_ref(void); INTERNAL_ABI void runtime_del_ref(void); +INTERNAL_ABI void runtime_add_weak_ref(void); +INTERNAL_ABI void runtime_del_weak_ref(void); INTERNAL_ABI void launchd_runtime_init(void); INTERNAL_ABI void launchd_runtime_init2(void); Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2008-03-27 22:56:23 UTC (rev 23579) +++ trunk/launchd/src/libvproc.c 2008-03-28 19:47:54 UTC (rev 23580) @@ -33,6 +33,7 @@ #include #include #include +#include #if HAVE_QUARANTINE #include #endif @@ -65,16 +66,12 @@ kr = vproc_mig_setup_shmem(bootstrap_port, &shmem_port); - if (unlikely(kr)) { - abort(); - } + assert(kr == 0); - kr = vm_map_64(mach_task_self(), &vm_addr, getpagesize(), 0, true, shmem_port, 0, false, + kr = vm_map(mach_task_self(), &vm_addr, getpagesize(), 0, true, shmem_port, 0, false, VM_PROT_READ|VM_PROT_WRITE, VM_PROT_READ|VM_PROT_WRITE, VM_INHERIT_NONE); - if (unlikely(kr)) { - abort(); - } + assert(kr == 0); vproc_shmem = (struct vproc_shmem_s *)vm_addr; } @@ -84,13 +81,13 @@ { vproc_transaction_t vpt = (vproc_transaction_t)vproc_shmem_init; /* we need a "random" variable that is testable */ - _basic_vproc_transaction_begin(); + _vproc_transaction_begin(); return vpt; } void -_basic_vproc_transaction_begin(void) +_vproc_transaction_begin(void) { typeof(vproc_shmem->vp_shmem_transaction_cnt) newval; @@ -115,13 +112,25 @@ } size_t -_basic_vproc_transaction_count(void) +_vproc_transaction_count(void) { return likely(vproc_shmem) ? vproc_shmem->vp_shmem_transaction_cnt : INT32_MAX; } +size_t +_vproc_standby_count(void) +{ + return likely(vproc_shmem) ? vproc_shmem->vp_shmem_standby_cnt : INT32_MAX; +} + +size_t +_vproc_standby_timeout(void) +{ + return likely(vproc_shmem) ? vproc_shmem->vp_shmem_standby_timeout : 0; +} + void -_basic_vproc_transaction_try_exit(int status) +_vproc_transaction_try_exit(int status) { typeof(vproc_shmem->vp_shmem_transaction_cnt) newval; @@ -146,11 +155,11 @@ abort(); } - _basic_vproc_transaction_end(); + _vproc_transaction_end(); } void -_basic_vproc_transaction_end(void) +_vproc_transaction_end(void) { typeof(vproc_shmem->vp_shmem_transaction_cnt) newval; @@ -171,12 +180,21 @@ vproc_standby_begin(vproc_t vp __attribute__((unused))) { vproc_standby_t vpsb = (vproc_standby_t)vproc_shmem_init; /* we need a "random" variable that is testable */ + + _vproc_standby_begin(); + + return vpsb; +} + +void +_vproc_standby_begin(void) +{ typeof(vproc_shmem->vp_shmem_standby_cnt) newval; if (unlikely(vproc_shmem == NULL)) { int po_r = pthread_once(&shmem_inited, vproc_shmem_init); if (po_r != 0 || vproc_shmem == NULL) { - return NULL; + return; } } @@ -186,20 +204,24 @@ __crashreporter_info__ = "Unbalanced: vproc_standby_begin()"; abort(); } - - return vpsb; } void vproc_standby_end(vproc_t vp __attribute__((unused)), vproc_standby_t vpt) { - typeof(vproc_shmem->vp_shmem_standby_cnt) newval; - if (unlikely(vpt != (vproc_standby_t)vproc_shmem_init)) { __crashreporter_info__ = "Bogus standby handle passed to vproc_standby_end() "; abort(); } + _vproc_standby_end(); +} + +void +_vproc_standby_end(void) +{ + typeof(vproc_shmem->vp_shmem_standby_cnt) newval; + newval = __sync_sub_and_fetch(&vproc_shmem->vp_shmem_standby_cnt, 1); if (unlikely(newval < 0)) { Modified: trunk/launchd/src/libvproc_internal.h =================================================================== --- trunk/launchd/src/libvproc_internal.h 2008-03-27 22:56:23 UTC (rev 23579) +++ trunk/launchd/src/libvproc_internal.h 2008-03-28 19:47:54 UTC (rev 23580) @@ -38,6 +38,7 @@ struct vproc_shmem_s { int32_t vp_shmem_transaction_cnt; int32_t vp_shmem_standby_cnt; + uint32_t vp_shmem_standby_timeout; int32_t vp_shmem_flags; }; Modified: trunk/launchd/src/libvproc_private.h =================================================================== --- trunk/launchd/src/libvproc_private.h 2008-03-27 22:56:23 UTC (rev 23579) +++ trunk/launchd/src/libvproc_private.h 2008-03-28 19:47:54 UTC (rev 23580) @@ -76,12 +76,17 @@ vproc_err_t _vprocmgr_move_subset_to_user(uid_t target_user, const char *session_type); -void _basic_vproc_transaction_begin(void); -void _basic_vproc_transaction_end(void); -size_t _basic_vproc_transaction_count(void); -void _basic_vproc_transaction_try_exit(int status); +void _vproc_standby_begin(void); +void _vproc_standby_end(void); +size_t _vproc_standby_count(void); +size_t _vproc_standby_timeout(void); +void _vproc_transaction_try_exit(int status); +void _vproc_transaction_begin(void); +void _vproc_transaction_end(void); +size_t _vproc_transaction_count(void); + #pragma GCC visibility pop __END_DECLS -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080328/de448cde/attachment-0001.html From source_changes at macosforge.org Fri Mar 28 16:01:07 2008 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Fri Mar 28 16:02:36 2008 Subject: [launchd-changes] [23581] tags/launchd-267/ Message-ID: <20080328230107.EEBED1517384@beta.macosforge.org> Revision: 23581 http://trac.macosforge.org/projects/launchd/changeset/23581 Author: zarzycki@apple.com Date: 2008-03-28 16:01:07 -0700 (Fri, 28 Mar 2008) Log Message: ----------- "Tagging launchd-267 from https://svn.macosforge.org/repository/launchd/trunk" Added Paths: ----------- tags/launchd-267/ Copied: tags/launchd-267 (from rev 23580, trunk) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080328/6c160678/attachment.html