Revision
23513
Author
zarzycki@apple.com
Date
2008-02-06 18:24:32 -0800 (Wed, 06 Feb 2008)

Log Message

<rdar://problem/5725563> Device hung on "slide to unlock" screen

Modified Paths

Diff

Modified: trunk/launchd/src/launchd_core_logic.c (23512 => 23513)


--- trunk/launchd/src/launchd_core_logic.c	2008-02-07 02:15:19 UTC (rev 23512)
+++ trunk/launchd/src/launchd_core_logic.c	2008-02-07 02:24:32 UTC (rev 23513)
@@ -461,6 +461,7 @@
 static bool cronemu_min(struct tm *wtm, int min);
 
 /* miscellaneous file local functions */
+static size_t get_kern_max_proc(void);
 static void ensure_root_bkgd_setup(void);
 static int dir_has_files(job_t j, const char *path);
 static char **mach_cmd2argv(const char *string);
@@ -2104,9 +2105,15 @@
 job_log_stray_pg(job_t j)
 {
 	int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PGRP, j->p };
-	size_t i, kp_cnt, len = 10*1024*1024;
+	size_t i, kp_cnt, len = sizeof(struct kinfo_proc) * get_kern_max_proc();
 	struct kinfo_proc *kp;
 
+#if TARGET_OS_EMBEDDED
+	if (!do_apple_internal_logging) {
+		return;
+	}
+#endif
+
 	runtime_ktrace(RTKT_LAUNCHD_FINDING_STRAY_PG, j->p, 0, 0);
 
 	if (!job_assumes(j, (kp = malloc(len)) != NULL)) {
@@ -2417,7 +2424,7 @@
 	int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL };
 #endif
 	int mib_sz = sizeof(mib) / sizeof(mib[0]);
-	size_t i, kp_cnt, len = 10*1024*1024;
+	size_t i, kp_cnt, len = sizeof(struct kinfo_proc) * get_kern_max_proc();
 	struct kinfo_proc *kp;
 
 	if (!do_apple_internal_logging || j->anonymous || j->per_user) {
@@ -2958,10 +2965,17 @@
 job_log_pids_with_weird_uids(job_t j)
 {
 	int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL };
-	size_t i, kp_cnt, len = 10*1024*1024;
-	struct kinfo_proc *kp = malloc(len);
+	size_t i, kp_cnt, len = sizeof(struct kinfo_proc) * get_kern_max_proc();
+	struct kinfo_proc *kp;
 	uid_t u = j->mach_uid;
 
+#if TARGET_OS_EMBEDDED
+	if (!do_apple_internal_logging) {
+		return;
+	}
+#endif
+	kp = malloc(len);
+
 	if (!job_assumes(j, kp != NULL)) {
 		return;
 	}
@@ -4464,9 +4478,15 @@
 jobmgr_log_stray_children(jobmgr_t jm)
 {
 	int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL };
-	size_t i, kp_cnt = 0, kp_skipped = 0, len = 10*1024*1024;
+	size_t i, kp_cnt = 0, kp_skipped = 0, len = sizeof(struct kinfo_proc) * get_kern_max_proc();
 	struct kinfo_proc *kp;
 
+#if TARGET_OS_EMBEDDED
+	if (!do_apple_internal_logging) {
+		return;
+	}
+#endif
+
 	if (likely(jm->parentmgr || !pid1_magic)) {
 		return;
 	}
@@ -6965,3 +6985,15 @@
 		}
 	} while ((returned == (sizeof(buf) / sizeof(buf[0]))) && (found > 0));
 }
+
+size_t
+get_kern_max_proc(void)
+{
+	int mib[] = { CTL_KERN, KERN_MAXPROC };
+	int max = 100;
+	size_t max_sz = sizeof(max);
+	
+	launchd_assumes(sysctl(mib, 2, &max, &max_sz, NULL, 0) != -1);
+	
+	return max;
+}