[launchd-changes] [23915] trunk/launchd/src

source_changes at macosforge.org source_changes at macosforge.org
Thu Apr 30 16:34:50 PDT 2009


Revision: 23915
          http://trac.macosforge.org/projects/launchd/changeset/23915
Author:   dsorresso at apple.com
Date:     2009-04-30 16:34:49 -0700 (Thu, 30 Apr 2009)
Log Message:
-----------
Using sysctl(2) instead of IOKit to get boot args.

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

Modified: trunk/launchd/src/launchctl.c
===================================================================
--- trunk/launchd/src/launchctl.c	2009-04-30 19:33:32 UTC (rev 23914)
+++ trunk/launchd/src/launchctl.c	2009-04-30 23:34:49 UTC (rev 23915)
@@ -178,7 +178,6 @@
 static void fix_bogus_file_metadata(void);
 static void do_file_init(void) __attribute__((constructor));
 static void setup_system_context(void);
-static void tell_launchd_about_boot_args(void);
 static void handle_system_bootstrapper_crashes_separately(void);
 static void fatal_signal_handler(int sig, siginfo_t *si, void *uap);
 
@@ -265,8 +264,7 @@
 static bool rootuser_context;
 static bool bootstrapping_system;
 static bool bootstrapping_peruser;
-static bool g_shutdown_debugging = false;
-static bool g_booting_verbose = false;
+static bool g_verbose_boot = false;
 
 static bool g_job_overrides_db_has_changed = false;
 static CFMutableDictionaryRef g_job_overrides_db = NULL;
@@ -1889,7 +1887,7 @@
 void
 handle_system_bootstrapper_crashes_separately(void)
 {
-	if( !g_booting_verbose ) {
+	if( !g_verbose_boot ) {
 		return;
 	}
 	
@@ -1971,7 +1969,6 @@
 		assumes(fwexec(rcserver_tool, NULL) != -1);
 	}
 
-	tell_launchd_about_boot_args();
 	read_launchd_conf();
 	handle_system_bootstrapper_crashes_separately();
 
@@ -3080,44 +3077,6 @@
 	bootstrap_port = rootbs;
 }
 
-static void
-tell_launchd_about_boot_args(void)
-{
-	CFTypeRef value = NULL;	
-	do {
-		io_registry_entry_t entry = IORegistryEntryFromPath(kIOMasterPortDefault, "IODeviceTree:/options");
-		if( !assumes(entry != IO_OBJECT_NULL) ) {
-			break;
-		}
-		
-		value = IORegistryEntryCreateCFProperty(entry, CFSTR("boot-args"), kCFAllocatorDefault, 0);
-		if( !assumes(value != NULL) ) {
-			break;
-		}
-		
-		IOObjectRelease(entry);
-	} while( 0 );
-	
-	if( value ) {
-		/* Normally I'd just use CFStringFind(), but the compiler whines about it returning a 
-		 * struct with -Wall.
-		 */
-		CFRange range = { 0, CFStringGetLength(value) };
-		CFRange found_range = { 0, 0 };
-		
-		g_booting_verbose = CFStringFindWithOptions(value, CFSTR("-v"), range, 0, &found_range);
-		CFRelease(value);
-		
-		if( g_booting_verbose ) {
-			assumes(vproc_swap_integer(NULL, VPROC_GSK_VERBOSE_BOOT, (int64_t *)&g_booting_verbose, NULL) == KERN_SUCCESS);
-			
-			if( g_shutdown_debugging ) {
-				assumes(vproc_swap_integer(NULL, VPROC_GSK_SHUTDOWN_DEBUGGING, (int64_t *)&g_booting_verbose, NULL) == KERN_SUCCESS);
-			}
-		}
-	}
-}
-
 int
 submit_cmd(int argc, char *const argv[])
 {
@@ -4093,8 +4052,11 @@
 	if (stat("/AppleInternal", &sb) == 0 && stat("/var/db/disableAppleInternal", &sb) == -1) {
 		do_apple_internal_magic = true;
 	}
-	
-	if( stat("/var/db/.launchd_shutdown_debugging", &sb) == 0 ) {
-		g_shutdown_debugging = true;
+
+	char bootargs[128];
+	size_t len = 0;
+	int r = sysctlbyname("kern.bootargs", bootargs, &len, NULL, 0);
+	if( r == 0 && strnstr(bootargs, "-v", len) != NULL ) {
+		g_verbose_boot = true;
 	}
 }

Modified: trunk/launchd/src/launchd.c
===================================================================
--- trunk/launchd/src/launchd.c	2009-04-30 19:33:32 UTC (rev 23914)
+++ trunk/launchd/src/launchd.c	2009-04-30 23:34:49 UTC (rev 23915)
@@ -210,6 +210,14 @@
 			runtime_syslog(LOG_NOTICE | LOG_CONSOLE_FORCE, "*** Using libgmalloc ***");
 		}
 
+		if( g_verbose_boot ) {
+			runtime_syslog(LOG_NOTICE | LOG_CONSOLE, "*** Verbose boot, will log to /dev/console. ***");
+		}
+
+		if( g_shutdown_debugging ) {
+			runtime_syslog(LOG_NOTICE | LOG_CONSOLE_FORCE, "*** Shutdown debugging is enabled. ***");
+		}
+
 		/* PID 1 doesn't have a flat namespace. */
 		g_flat_mach_namespace = false;
 	}

Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c	2009-04-30 19:33:32 UTC (rev 23914)
+++ trunk/launchd/src/launchd_core_logic.c	2009-04-30 23:34:49 UTC (rev 23915)
@@ -3008,7 +3008,7 @@
 		return NULL;
 	}
 #endif
-	
+
 	/*
 	 * The whole job removal logic needs to be consolidated. The fact that
 	 * a job can be removed from just about anywhere makes it easy to have
@@ -7168,18 +7168,6 @@
 	case VPROC_GSK_WAITFORDEBUGGER:
 		j->wait4debugger_oneshot = inval;
 		break;
-	case VPROC_GSK_SHUTDOWN_DEBUGGING:
-		if( pid1_magic && j->is_bootstrapper && inval ) {
-			runtime_syslog(LOG_NOTICE | LOG_CONSOLE_FORCE, "*** Shutdown debugging is enabled. ***");
-			g_shutdown_debugging = inval;
-		}
-		break;
-	case VPROC_GSK_VERBOSE_BOOT:
-		if( pid1_magic && j->is_bootstrapper && inval ) {
-			g_verbose_boot = inval;
-			runtime_syslog(LOG_NOTICE | LOG_CONSOLE, "*** Verbose boot, will log to /dev/console. ***");
-		}
-		break;
 	case VPROC_GSK_PERUSER_SUSPEND:
 		if( job_assumes(j, pid1_magic && ldc->euid == 0) ) {
 			mach_port_t junk = MACH_PORT_NULL;

Modified: trunk/launchd/src/launchd_runtime.c
===================================================================
--- trunk/launchd/src/launchd_runtime.c	2009-04-30 19:33:32 UTC (rev 23914)
+++ trunk/launchd/src/launchd_runtime.c	2009-04-30 23:34:49 UTC (rev 23915)
@@ -1829,6 +1829,17 @@
 		g_log_pid1_shutdown = true;
 	}
 	
+	char bootargs[128];
+	size_t len = sizeof(bootargs);
+	int r = pid1_magic ? sysctlbyname("kern.bootargs", bootargs, &len, NULL, 0) : -1;
+	if( r == 0 && strnstr(bootargs, "-v", len) != NULL ) {
+		g_verbose_boot = true;
+	}
+	
+	if( pid1_magic && g_verbose_boot && stat("/var/db/.launchd_shutdown_debugging", &sb) == 0 ) {
+		g_shutdown_debugging = true;
+	}
+	
 	if( stat("/var/db/.launchd_log_strict_usage", &sb) == 0 ) {
 		g_log_strict_usage = true;
 	}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/launchd-changes/attachments/20090430/4afccbce/attachment.html>


More information about the launchd-changes mailing list