[launchd-changes] [23002] trunk/launchd/src/launchd_core_logic.c

source_changes at macosforge.org source_changes at macosforge.org
Thu Jan 4 15:15:47 PST 2007


Revision: 23002
          http://trac.macosforge.org/projects/launchd/changeset/23002
Author:   zarzycki at apple.com
Date:     2007-01-04 15:15:46 -0800 (Thu, 04 Jan 2007)

Log Message:
-----------
<rdar://problem/4904970> launchd needs to do better buffer management for job stdout/stderr

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

Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c	2007-01-04 20:17:27 UTC (rev 23001)
+++ trunk/launchd/src/launchd_core_logic.c	2007-01-04 23:15:46 UTC (rev 23002)
@@ -46,6 +46,7 @@
 #include <sys/resource.h>
 #include <sys/ioctl.h>
 #include <sys/mount.h>
+#include <sys/pipe.h>
 #include <net/if.h>
 #include <netinet/in.h>
 #include <netinet/in_var.h>
@@ -1686,26 +1687,31 @@
 void
 job_log_stdouterr(job_t j)
 {
-	char buf[4001];
+	char *msg, *bufindex, *buf = malloc(BIG_PIPE_SIZE + 1);
 	ssize_t rsz;
 
-	rsz = read(j->log_redirect_fd, buf, sizeof(buf) - 1);
+	if (!job_assumes(j, buf != NULL)) {
+		return;
+	}
 
+	bufindex = buf;
+
+	rsz = read(j->log_redirect_fd, buf, BIG_PIPE_SIZE);
+
 	if (rsz == 0) {
 		job_assumes(j, close(j->log_redirect_fd) != -1);
 		j->log_redirect_fd = 0;
 	} else if (job_assumes(j, rsz != -1)) {
 		buf[rsz] = '\0';
-		switch (buf[0]) {
-		case '\n':
-		case '\r':
-		case '\0':
-			break;
-		default:
-			job_log(j, LOG_NOTICE, "Standard Out/Error: %s", buf);
-			break;
+
+		while ((msg = strsep(&bufindex, "\n\r"))) {
+			if (msg[0]) {
+				job_log(j, LOG_NOTICE, "Standard Out/Error: %s", msg);
+			}
 		}
 	}
+
+	free(buf);
 }
 
 void

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070104/336a7e1c/attachment.html


More information about the launchd-changes mailing list