[launchd-changes] [23225] trunk/launchd/src/launchd_core_logic.c

source_changes at macosforge.org source_changes at macosforge.org
Tue Apr 17 13:40:43 PDT 2007


Revision: 23225
          http://trac.macosforge.org/projects/launchd/changeset/23225
Author:   zarzycki at apple.com
Date:     2007-04-17 13:40:43 -0700 (Tue, 17 Apr 2007)

Log Message:
-----------
Loginwindow is always the exception to every rule. They're playing both in the 'Aqua' and 'Background' bootstraps and confusing launchd.

Modified Paths:
--------------
    trunk/launchd/src/launchd_core_logic.c

Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c	2007-04-17 15:56:02 UTC (rev 23224)
+++ trunk/launchd/src/launchd_core_logic.c	2007-04-17 20:40:43 UTC (rev 23225)
@@ -263,7 +263,7 @@
 
 #define DO_RUSAGE_SUMMATION 0
 
-#define AUTO_PICK_LEGACY_MACH_LABEL (const char *)(~0)
+#define AUTO_PICK_LEGACY_LABEL (const char *)(~0)
 
 struct job_s {
 	kq_callback kqjob_callback;
@@ -863,7 +863,7 @@
 		goto out_bad;
 	}
 
-	jr = job_new(j->mgr, AUTO_PICK_LEGACY_MACH_LABEL, NULL, argv);
+	jr = job_new(j->mgr, AUTO_PICK_LEGACY_LABEL, NULL, argv);
 
 	free(argv);
 
@@ -967,7 +967,6 @@
 job_new_anonymous(jobmgr_t jm, pid_t anonpid)
 {
 	int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, anonpid };
-	char newlabel[1000];
 	struct kinfo_proc kp, ppid_kp;
 	size_t len = sizeof(kp);
 	bool shutdown_state;
@@ -983,14 +982,12 @@
 		return NULL;
 	}
 
-	snprintf(newlabel, sizeof(newlabel), "anonymous-%u.%s", anonpid, kp.kp_proc.p_comm);
-
 	/* A total hack: Normally, job_new() returns an error during shutdown, but anonymous jobs are special. */
 	if ((shutdown_state = jm->shutting_down)) {
 		jm->shutting_down = false;
 	}
 
-	if (jobmgr_assumes(jm, (jr = job_new(jm, newlabel, kp.kp_proc.p_comm, NULL)) != NULL)) {
+	if (jobmgr_assumes(jm, (jr = job_new(jm, AUTO_PICK_LEGACY_LABEL, kp.kp_proc.p_comm, NULL)) != NULL)) {
 		total_children++;
 		jr->anonymous = true;
 		jr->p = anonpid;
@@ -1016,7 +1013,7 @@
 {
 	const char *const *argv_tmp = argv;
 	char auto_label[1000];
-	char *bn = NULL;
+	const char *bn = NULL;
 	char *co;
 	size_t minlabel_len;
 	int i, cc = 0;
@@ -1034,19 +1031,16 @@
 		return NULL;
 	}
 
-	if (label == AUTO_PICK_LEGACY_MACH_LABEL) {
-		bn = basename((char *)argv[0]);
+	if (label == AUTO_PICK_LEGACY_LABEL) {
+		bn = prog ? prog : basename((char *)argv[0]); /* 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 */
+		minlabel_len = strlen(label) + MAXCOMLEN;
+	} else {
+		minlabel_len = strlen(label);
 	}
 
-	/* This is so we can do gross things later. See NOTE_EXEC for anonymous jobs */
-#define MAX_ANONYMOUS_LABEL_LEN (sizeof("anonymous-100000.") + MAXCOMLEN)
-	minlabel_len = strlen(label);
-	if (minlabel_len < MAX_ANONYMOUS_LABEL_LEN) {
-		minlabel_len = MAX_ANONYMOUS_LABEL_LEN;
-	}
-
 	j = calloc(1, sizeof(struct job_s) + minlabel_len + 1);
 
 	if (!jobmgr_assumes(jm, j != NULL)) {
@@ -1954,7 +1948,7 @@
 		if (job_assumes(j, sysctl(mib, 4, &kp, &len, NULL, 0) != -1)) {
 			char newlabel[1000];
 
-			snprintf(newlabel, sizeof(newlabel), "anonymous-%u.%s", j->p, kp.kp_proc.p_comm);
+			snprintf(newlabel, sizeof(newlabel), "%p.%s", j, kp.kp_proc.p_comm);
 
 			job_log(j, LOG_DEBUG, "Program changed. Updating the label to: %s", newlabel);
 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070417/42341fd0/attachment.html


More information about the launchd-changes mailing list