Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Jul 2005 18:00:38 GMT
From:      soc-tyler <soc-tyler@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 80195 for review
Message-ID:  <200507141800.j6EI0cIH000329@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=80195

Change 80195 by soc-tyler@soc-tyler_launchd on 2005/07/14 17:59:44

	Restart from scratch with launchd.c, start #ifdef'ing Darwin specific nonsense out here and there. Add a few comments from zarzycki@'s explaination of pid1_magic_init()

Affected files ...

.. //depot/projects/soc2005/launchd/includes/launchd.h#3 edit
.. //depot/projects/soc2005/launchd/launchd.c#3 edit

Differences ...

==== //depot/projects/soc2005/launchd/includes/launchd.h#3 (text+ko) ====

@@ -28,8 +28,9 @@
 typedef void (*kq_callback)(void *, struct kevent *);
 
 extern kq_callback kqsimple_zombie_reaper;
-/* Mac OS/NeXT specific */
-//extern mach_port_t launchd_bootstrap_port;
+#ifdef _BUILD_MACOS
+extern mach_port_t launchd_bootstrap_port;
+#endif
 extern sigset_t blocked_signals;
 
 #ifdef PID1_REAP_ADOPTED_CHILDREN
@@ -47,4 +48,9 @@
 void catatonia(void);
 void death(void);
 
+// on Darwin-based systems, LOG_LAUNCHD is defined for syslog()
+#ifndef _BUILD_MACOS
+#define LOG_LAUNCHD LOG_DAEMON
+#endif
+
 #endif

==== //depot/projects/soc2005/launchd/launchd.c#3 (text+ko) ====

@@ -47,10 +47,8 @@
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
- 
-/* Mac OS specific frameworks (and NeXT-specific for that matter) 
- * XXX: these need to be implemented or worked around in another manner
---------------------------------------------------------------------------------
+
+#ifdef _BUILD_MACOS
 #include <Security/Authorization.h>
 #include <Security/AuthorizationTags.h>
 #include <Security/AuthSession.h>
@@ -58,26 +56,26 @@
 #include <mach/mach_error.h>
 #include <mach/port.h>
 #endif
---------------------------------------------------------------------------------
- */
+#endif
+
 #include <sys/types.h>
 #include <sys/queue.h>
 #include <sys/event.h>
 #include <sys/stat.h>
-/* sys/param.h defines NGROUPS which is necessary for sys/ucred.h */
 #include <sys/param.h>
 #include <sys/ucred.h>
 #include <sys/fcntl.h>
 #include <sys/un.h>
 #include <sys/wait.h>
 #include <sys/sysctl.h>
+#include <sys/sockio.h>
 #include <sys/socket.h>
-#include <sys/sockio.h>
 #include <sys/time.h>
 #include <sys/resource.h>
 #include <sys/ioctl.h>
 #include <sys/mount.h>
 #include <net/if.h>
+#include <net/if_var.h>
 #include <netinet/in.h>
 #include <netinet/in_var.h>
 #include <netinet6/nd6.h>
@@ -90,6 +88,7 @@
 #include <stdlib.h>
 #include <stdarg.h>
 #include <stdbool.h>
+#include <string.h>
 #include <pthread.h>
 #include <paths.h>
 #include <pwd.h>
@@ -101,21 +100,21 @@
 #include "launch_priv.h"
 #include "launchd.h"
 
-/* Another mach/Mac OS specific header that's been stripped out for FreeBSD 
- * related work, similar items on FreeBSD might be related to init(8)
+#ifdef _BUILD_MACOS
 #include "bootstrap_internal.h"
- */
+#endif
 
 #define LAUNCHD_MIN_JOB_RUN_TIME 10
 #define LAUNCHD_REWARD_JOB_RUN_TIME 60
 #define LAUNCHD_FAILED_EXITS_THRESHOLD 10
 #define PID1LAUNCHD_CONF "/etc/launchd.conf"
 #define LAUNCHD_CONF ".launchd.conf"
-#define LAUNCHCTL_PATH "/bin/launchctl"
-/* Mac OS specific
+#define LAUNCHCTL_PATH "/sbin/launchctl"
+
+#ifdef _BUILD_MACOS
 #define SECURITY_LIB "/System/Library/Frameworks/Security.framework/Versions/A/Security"
 #define VOLFSDIR "/.vol"
- */
+#endif
 
 extern char **environ;
 
@@ -220,18 +219,20 @@
 static pid_t readcfg_pid = 0;
 static bool launchd_inited = false;
 static bool shutdown_in_progress = false;
+
+sigset_t blocked_signals;
+
+#ifdef _BUILD_MACOS
 static pthread_t mach_server_loop_thread;
-/* We undeclared this variable in includes/launchd.h so we will do so here as
- * well. (on Darwin, mach_port_t is an unsigned int, it's purpose escapes me..
- * I would assume it's related to mach's bootstrap concept, so I should probably 
- * hit it as I replace init(8)
 mach_port_t launchd_bootstrap_port = MACH_PORT_NULL;
- */
-sigset_t blocked_signals = 0;
+blocked_signals = 0;
+#endif
+
 static char *pending_stdout = NULL;
 static char *pending_stderr = NULL;
 
-int main(int argc, char *argv[]) {
+int main(int argc, char *argv[])
+{
 	static const int sigigns[] = { SIGHUP, SIGINT, SIGPIPE, SIGALRM,
 		SIGTERM, SIGURG, SIGTSTP, SIGTSTP, SIGCONT, /*SIGCHLD,*/
 		SIGTTIN, SIGTTOU, SIGIO, SIGXCPU, SIGXFSZ, SIGVTALRM, SIGPROF,
@@ -318,7 +319,9 @@
 	if (getpid() == 1) {
 		pid1_magic_init(sflag, vflag, xflag);
 	} else {
+#ifdef _BUILD_MACOS	
 		launchd_bootstrap_port = bootstrap_port;
+#endif
 		launchd_server_init(argv[0] ? true : false);
 	}
 
@@ -403,34 +406,41 @@
 		if (memsz == 4)
 			mem = *(uint32_t *)&mem;
 		mvn = mem / (64 * 1024) + 1024;
+		
+		// Performance note: change the max # of vnodes
 		if (sysctl(mvnmib, 2, NULL, NULL, &mvn, sizeof(mvn)) == -1)
 			syslog(LOG_WARNING, "sysctl(\"%s\"): %m", "kern.maxvnodes");
 	}
+	
+	// Performance note: set our hostname to localhost for now
 	if (sysctl(hnmib, 2, NULL, NULL, "localhost", sizeof("localhost")) == -1)
 		syslog(LOG_WARNING, "sysctl(\"%s\"): %m", "kern.hostname");
 
 	if (setlogin("root") == -1)
 		syslog(LOG_ERR, "setlogin(\"root\"): %m");
-
+	
+	// Performance note: setup our loopback interface inline
 	loopback_setup();
 
 	if (mount("fdesc", "/dev", MNT_UNION, NULL) == -1)
 		syslog(LOG_ERR, "mount(\"%s\", \"%s\", ...): %m", "fdesc", "/dev/");
 
 	setenv("PATH", _PATH_STDPATH, 1);
-
+#ifdef _BUILD_MACOS
 	launchd_bootstrap_port = mach_init_init();
 	task_set_bootstrap_port(mach_task_self(), launchd_bootstrap_port);
 	bootstrap_port = MACH_PORT_NULL;
+#endif
 
 	pthread_attr_init(&attr);
 	pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-
+#ifdef _BUILD_MACOS
 	pthr_r = pthread_create(&mach_server_loop_thread, &attr, mach_server_loop, NULL);
 	if (pthr_r != 0) {
 		syslog(LOG_ERR, "pthread_create(mach_server_loop): %s", strerror(pthr_r));
 		exit(EXIT_FAILURE);
 	}
+#endif
 
 	pthread_attr_destroy(&attr);
 
@@ -2246,6 +2256,10 @@
 	return launch_data_new_opaque(l, sizeof(struct rlimit) * RLIM_NLIMITS);
 }
 
+/* 
+ * XXX: I'm not exactly sure what this function's exact purpose is.
+ */
+#ifdef _BUILD_MACOS
 __private_extern__ void launchd_SessionCreate(const char *who)
 {
 	void *seclib = dlopen(SECURITY_LIB, RTLD_LAZY);
@@ -2267,6 +2281,7 @@
 		syslog(LOG_WARNING, "%s: dlopen(\"%s\",...): %s", who, SECURITY_LIB, dlerror());
 	}
 }
+#endif
 
 static int dir_has_files(const char *path)
 {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200507141800.j6EI0cIH000329>