Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Fix error message on short read of pg_control
authorMagnus Hagander <magnus@hagander.net>
Fri, 18 May 2018 15:53:20 +0000 (17:53 +0200)
committerMagnus Hagander <magnus@hagander.net>
Fri, 18 May 2018 15:53:20 +0000 (17:53 +0200)
Instead of saying "error: success", indicate that we got a working read
but it was too short.

src/backend/access/transam/xlog.c

index 218f98d29fd22ed357055ece95ba93ab14acbdc1..618d427377222c83ee4ef885d30c2f4919ffd057 100644 (file)
@@ -3582,6 +3582,7 @@ ReadControlFile(void)
 {
    pg_crc32    crc;
    int         fd;
+   int         r;
 
    /*
     * Read data...
@@ -3595,10 +3596,17 @@ ReadControlFile(void)
                 errmsg("could not open control file \"%s\": %m",
                        XLOG_CONTROL_FILE)));
 
-   if (read(fd, ControlFile, sizeof(ControlFileData)) != sizeof(ControlFileData))
-       ereport(PANIC,
-               (errcode_for_file_access(),
-                errmsg("could not read from control file: %m")));
+   r = read(fd, ControlFile, sizeof(ControlFileData));
+   if (r != sizeof(ControlFileData))
+   {
+       if (r < 0)
+           ereport(PANIC,
+                   (errcode_for_file_access(),
+                    errmsg("could not read from control file: %m")));
+       else
+           ereport(PANIC,
+                    (errmsg("could not read from control file: read %d bytes, expected %d", r, (int) sizeof(ControlFileData))));
+   }
 
    close(fd);