diff options
-rw-r--r-- | ChangeLog.txt | 1 | ||||
-rw-r--r-- | pseudo_server.c | 3 | ||||
-rw-r--r-- | pseudo_util.c | 13 |
3 files changed, 15 insertions, 2 deletions
diff --git a/ChangeLog.txt b/ChangeLog.txt index d410dd4..b07a1f0 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -2,6 +2,7 @@ * (seebs) don't try to search path when you don't have one * (seebs) merge in ports branch * (seebs) fix permissions on subports/preports + * (seebs) try to force debug fd to 2 2011-03-24: * (seebs) more work on OS X port. diff --git a/pseudo_server.c b/pseudo_server.c index e64c68c..f241242 100644 --- a/pseudo_server.c +++ b/pseudo_server.c @@ -164,8 +164,7 @@ pseudo_server_start(int daemonize) { pseudo_new_pid(); fclose(stdin); fclose(stdout); - if (!pseudo_logfile(PSEUDO_LOGFILE)) - fclose(stderr); + pseudo_logfile(PSEUDO_LOGFILE); } else { /* Write the pid if we don't daemonize */ pseudo_server_write_pid(getpid()); diff --git a/pseudo_util.c b/pseudo_util.c index d19bd0c..ada6060 100644 --- a/pseudo_util.c +++ b/pseudo_util.c @@ -1371,6 +1371,19 @@ pseudo_logfile(char *defname) { if (fd == -1) { pseudo_diag("help: can't open log file %s: %s\n", pseudo_path, strerror(errno)); } else { + /* try to force fd to 2. We do this because glibc's malloc + * debug unconditionally writes to fd 2, and we don't want + * a client process ending op on fd 2, or server debugging + * becomes a nightmare. + */ + if (fd != 2) { + int newfd; + close(2); + newfd = dup2(fd, 2); + if (newfd != -1) { + fd = newfd; + } + } pseudo_util_debug_fd = fd; } free(pseudo_path); |