PERFORCE change 82499 for review
soc-tyler
soc-tyler at FreeBSD.org
Wed Aug 24 16:34:48 GMT 2005
http://perforce.freebsd.org/chv.cgi?CH=82499
Change 82499 by soc-tyler at soc-tyler_launchd on 2005/08/24 16:34:27
Set a definite, development-only LAUNCHD_PATH and LAUNCHCTL_PATH so that
I can start launchd as a child of launchctl to ensure that they can
"talk" to each other via launch_msg()
Add suggested fix for ADC Bug #4229882 which references launchd
idly dying despite launchctl still maintaining an open socket connection
to it (i.e. when the daemon is not running jobs)
Oh, and add a few more fprintf()'s to make sure I know what I'm doing ;)
Affected files ...
.. //depot/projects/soc2005/launchd/includes/launch.h#10 edit
.. //depot/projects/soc2005/launchd/launchd.c#13 edit
.. //depot/projects/soc2005/launchd/liblaunch.c#11 edit
Differences ...
==== //depot/projects/soc2005/launchd/includes/launch.h#10 (text+ko) ====
@@ -53,14 +53,15 @@
#include <stddef.h>
#include <stdbool.h>
-/* XXX: if _LAUNCHD_ is defined, then I'm working with the source code, so the
- * the relevant launchctl(1) executable is in our current working dir.
- */
#ifdef _LAUNCHD_
-#define LAUNCHCTL_PATH "./launchctl/launchctl"
-#define LAUNCHD_PATH "./launchd"
-#else
+#define LAUNCHD_PATH "/home/tyler/perforce/launchd/launchd"
+#define LAUNCHCTL_PATH "/home/tyler/perforce/launchd/launchctl/launchctl"
+#endif
+
+#ifndef LAUNCHCTL_PATH
#define LAUNCHCTL_PATH "/sbin/launchctl"
+#endif
+#ifndef LAUNCHD_PATH
#define LAUNCHD_PATH "/sbin/launchd"
#endif
==== //depot/projects/soc2005/launchd/launchd.c#13 (text+ko) ====
@@ -368,7 +368,7 @@
if (readcfg_pid == 0)
init_pre_kevent();
} else {
- if (TAILQ_EMPTY(&jobs)) {
+ if (TAILQ_EMPTY(&jobs) && TAILQ_EMPTY(&connections)) {
/* launched on demand */
timeoutp = &timeout;
} else if (shutdown_in_progress && total_children == 0) {
@@ -525,6 +525,10 @@
snprintf(ourdir, sizeof(ourdir), "%s/%u.%u", LAUNCHD_SOCK_PREFIX, getuid(), getpid());
snprintf(sun.sun_path, sizeof(sun.sun_path), "%s/%u.%u/sock", LAUNCHD_SOCK_PREFIX, getuid(), getpid());
setenv(LAUNCHD_SOCKET_ENV, sun.sun_path, 1);
+#ifdef _LAUNCHD_
+ fprintf(stderr, "Setting the socket path to \"%s\"\n", sun.sun_path);
+#endif
+
} else {
snprintf(ourdir, sizeof(ourdir), "%s/%u", LAUNCHD_SOCK_PREFIX, getuid());
snprintf(sun.sun_path, sizeof(sun.sun_path), "%s/%u/sock", LAUNCHD_SOCK_PREFIX, getuid());
==== //depot/projects/soc2005/launchd/liblaunch.c#11 (text+ko) ====
@@ -125,6 +125,8 @@
#ifdef _LAUNCHD_
fprintf(stderr,"starting launch_client_init() in liblaunch.c:%d\n", __LINE__);
+ fprintf(stderr,"where = \"%s\"\n", where);
+ fprintf(stderr,"_launchd_fd = \"%s\"\n", _launchd_fd);
#endif
_lc = calloc(1, sizeof(struct _launch_client));
@@ -178,7 +180,7 @@
for (tries = 0; tries < 10; tries++) {
r = connect(lfd, (struct sockaddr *)&sun, sizeof(sun));
if (r == -1) {
- if (getuid() != 0 && fork() == 0)
+ if (fork() == 0)
execl(LAUNCHD_PATH, LAUNCHD_PATH, NULL);
sleep(1);
} else {
More information about the p4-projects
mailing list