[prev in list] [next in list] [prev in thread] [next in thread]
List: launchd-changes
Subject: [launchd-changes] [22920] trunk/launchd/src
From: source_changes () macosforge ! org (source_changes () macosforge ! org)
Date: 2006-10-26 11:07:09
Message-ID: 20061026180056.2FC7E25ACA9 () cvs ! opensource ! apple ! com
[Download RAW message or body]
Revision: 22920
http://trac.macosforge.org/projects/launchd/changeset/22920
Author: zarzycki@apple.com
Date: 2006-10-26 11:00:55 -0700 (Thu, 26 Oct 2006)
Log Message:
-----------
It was always dubious that job_log*() could be called on the child side of the
fork() but before the exec*(). This provides a cleaner solution that is less
likely to confuse launchd itself or any logging API it uses (syslog or asl_log).
As a side effect, jobs _could_ now log indirectly via launchd, but I'm not sure
we'll make that public API yet... Maybe someday when we have a somewhat more
compelling story over syslog() or asl_log(), but that day isn't today, nor do I
intend to put much effort to acheiving that goal in the foreseeable future.
Modified Paths:
--------------
trunk/launchd/src/launchd_core_logic.c
trunk/launchd/src/libvproc.c
trunk/launchd/src/libvproc_internal.h
Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c 2006-10-26 01:18:08 UTC (rev 22919)
+++ trunk/launchd/src/launchd_core_logic.c 2006-10-26 18:00:55 UTC (rev 22920)
@@ -283,7 +283,7 @@
static void job_uncork_fork(job_t j);
static struct machservice *job_lookup_service(job_t jbs, const char *name, bool \
check_parent); static void job_foreach_service(job_t jbs, void (*bs_iter)(struct \
machservice *, void *), void *context, bool only_anonymous);
-static void job_logv(job_t j, int pri, const char *msg, va_list ap);
+static void job_logv(job_t j, int pri, int err, const char *msg, va_list ap);
static void job_log(job_t j, int pri, const char *msg, ...) \
__attribute__((format(printf, 3, 4))); static void job_log_error(job_t j, int pri, \
const char *msg, ...) __attribute__((format(printf, 3, 4))); static void \
job_log_bug(job_t j, const char *rcs_rev, const char *path, unsigned int line, const \
char *test); @@ -2115,15 +2115,28 @@
}
void
-job_logv(job_t j, int pri, const char *msg, va_list ap)
+job_logv(job_t j, int pri, int err, const char *msg, va_list ap)
{
char newmsg[10000];
int oldmask = 0;
size_t o;
+ /*
+ * Hack: If bootstrap_port is set, we must be on the child side of a
+ * fork(), but before the exec*(). Let's route the log message back to
+ * launchd proper.
+ */
+ if (bootstrap_port) {
+ return _vproc_logv(pri, err, msg, ap);
+ }
+
o = job_prep_log_preface(j, newmsg);
- sprintf(newmsg + o, ": %s", msg);
+ if (err) {
+ sprintf(newmsg + o, ": %s: %s", msg, strerror(err));
+ } else {
+ sprintf(newmsg + o, ": %s", msg);
+ }
if (j->debug) {
oldmask = setlogmask(LOG_UPTO(LOG_DEBUG));
@@ -2139,13 +2152,10 @@
void
job_log_error(job_t j, int pri, const char *msg, ...)
{
- char newmsg[10000];
va_list ap;
- sprintf(newmsg, "%s: %s", msg, strerror(errno));
-
va_start(ap, msg);
- job_logv(j, pri, newmsg, ap);
+ job_logv(j, pri, errno, msg, ap);
va_end(ap);
}
@@ -2155,7 +2165,7 @@
va_list ap;
va_start(ap, msg);
- job_logv(j, pri, msg, ap);
+ job_logv(j, pri, 0, msg, ap);
va_end(ap);
}
Modified: trunk/launchd/src/libvproc.c
===================================================================
--- trunk/launchd/src/libvproc.c 2006-10-26 01:18:08 UTC (rev 22919)
+++ trunk/launchd/src/libvproc.c 2006-10-26 18:00:55 UTC (rev 22920)
@@ -177,7 +177,7 @@
return (vproc_err_t)_vproc_set_global_on_demand;
}
-static void
+void
_vproc_logv(int pri, int err, const char *msg, va_list ap)
{
char flat_msg[3000];
Modified: trunk/launchd/src/libvproc_internal.h
===================================================================
--- trunk/launchd/src/libvproc_internal.h 2006-10-26 01:18:08 UTC (rev 22919)
+++ trunk/launchd/src/libvproc_internal.h 2006-10-26 18:00:55 UTC (rev 22920)
@@ -21,6 +21,7 @@
*/
#include <mach/mach.h>
+#include <stdarg.h>
#include "libbootstrap_public.h"
typedef char * _internal_string_t;
@@ -51,7 +52,9 @@
kern_return_t _vprocmgr_getsocket(mach_port_t bp, name_t);
+void _vproc_logv(int pri, int err, const char *msg, va_list ap);
+
kern_return_t
bootstrap_look_up_array(
mach_port_t bp,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20061026/3e22e069/attachment.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic