aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.txt1
-rw-r--r--pseudo_server.c3
-rw-r--r--pseudo_util.c13
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);