]> granicus.if.org Git - postgresql/commitdiff
Don't pass an invalid file handle to dup2(). That causes a crash on
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 1 Apr 2010 20:12:28 +0000 (20:12 +0000)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 1 Apr 2010 20:12:28 +0000 (20:12 +0000)
Windows, thanks to a feature in CRT called Parameter Validation.

Backpatch to 8.2, which is the oldest version supported on Windows. In
8.2 and 8.3 also backpatch the earlier change to use DEVNULL instead of
NULL_DEV #define for a /dev/null-like device. NULL_DEV was hard-coded to
"/dev/null" regardless of platform, which didn't work on Windows, while
DEVNULL works on all platforms. Restarting syslogger didn't work on
Windows on versions 8.3 and below because of that.

src/backend/postmaster/syslogger.c

index 89f2beb6aca51e1beed252a18c6bb4e3d4be5ee0..b58cdf670e709bbde11c7baf7bed2908e9ef1f59 100644 (file)
@@ -18,7 +18,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.51.2.1 2009/11/19 02:45:40 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.51.2.2 2010/04/01 20:12:28 heikki Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -194,9 +194,12 @@ SysLoggerMain(int argc, char *argv[])
                 */
                close(fileno(stdout));
                close(fileno(stderr));
-               dup2(fd, fileno(stdout));
-               dup2(fd, fileno(stderr));
-               close(fd);
+               if (fd != -1)
+               {
+                       dup2(fd, fileno(stdout));
+                       dup2(fd, fileno(stderr));
+                       close(fd);
+               }
        }
 
        /*