Revision
929
Author
wsiegrist@apple.com
Date
2011-02-08 12:07:22 -0800 (Tue, 08 Feb 2011)

Log Message

Dont bother fsyncing and return sooner from setup when setup already done

Modified Paths

Diff

Modified: branches/PR-8817822/darwintrace/darwintrace.c (928 => 929)


--- branches/PR-8817822/darwintrace/darwintrace.c	2011-02-08 19:58:24 UTC (rev 928)
+++ branches/PR-8817822/darwintrace/darwintrace.c	2011-02-08 20:07:22 UTC (rev 929)
@@ -123,40 +123,37 @@
 }
 
 static inline void darwintrace_setup() {
-	if (darwintrace_fd == -2) {
-	  char* path = getenv("DARWINTRACE_LOG");
-	  if (path != NULL) {
-      int olderrno = errno;
-      int fd = open(path,
-                    O_CREAT | O_WRONLY | O_APPEND,
-                    DEFFILEMODE);
-      int newfd;
-      for(newfd = DARWINTRACE_START_FD; newfd < DARWINTRACE_START_FD + 21; newfd++) {
-        if(-1 == write(newfd, "", 0) && errno == EBADF) {
-          if(-1 != dup2(fd, newfd))
-            darwintrace_fd = newfd;
-          close(fd);
-          fcntl(darwintrace_fd, F_SETFD, 1); /* close-on-exec */
-          break;
-        }
+	if (darwintrace_fd != -2) return;
+  
+  char* path = getenv("DARWINTRACE_LOG");
+  if (path != NULL) {
+    int olderrno = errno;
+    int fd = open(path,
+                  O_CREAT | O_WRONLY | O_APPEND,
+                  DEFFILEMODE);
+    int newfd;
+    for(newfd = DARWINTRACE_START_FD; newfd < DARWINTRACE_START_FD + 21; newfd++) {
+      if(-1 == write(newfd, "", 0) && errno == EBADF) {
+        if(-1 != dup2(fd, newfd)) darwintrace_fd = newfd;
+        close(fd);
+        fcntl(darwintrace_fd, F_SETFD, 1); /* close-on-exec */
+        break;
       }
-      errno = olderrno;
-	  }
+    }
+    errno = olderrno;
+  }
 
-	  /* read env vars needed for redirection */
-	  darwintrace_redirect = getenv("DARWINTRACE_REDIRECT");
-	  darwintrace_buildroot = getenv("DARWIN_BUILDROOT");
-	}
+  /* read env vars needed for redirection */
+  darwintrace_redirect = getenv("DARWINTRACE_REDIRECT");
+  darwintrace_buildroot = getenv("DARWIN_BUILDROOT");
 
-	if (darwintrace_pid == -1) {
-		darwintrace_pid = getpid();
-		char** progname = _NSGetProgname();
-		if (progname && *progname) {
-		  if (strlcpy(darwintrace_progname, *progname, sizeof(darwintrace_progname)) >= sizeof(darwintrace_progname)) {
-		    dprintf("darwintrace: progname too long to copy: %s\n", *progname);
-		  }
-		}
-	}
+  darwintrace_pid = getpid();
+  char** progname = _NSGetProgname();
+  if (progname && *progname) {
+    if (strlcpy(darwintrace_progname, *progname, sizeof(darwintrace_progname)) >= sizeof(darwintrace_progname)) {
+      dprintf("darwintrace: progname too long to copy: %s\n", *progname);
+    }
+  }
 }
 
 /* darwintrace_setup must have been called already */
@@ -167,7 +164,6 @@
                       procname ? procname : darwintrace_progname, darwintrace_pid,
                       tag, path);
   write(fd, darwintrace_buf, size);
-  fsync(fd);
 }
 
 /* remap resource fork access to the data fork.