Hi there,
with gcc 4.8.3, I'm getting this warning in xloginsert.c:
-
xloginsert.c: In function ‘XLogInsert’:
xloginsert.c:668:20: warning: ‘hole_length’ may be used uninitialized in
this function [-Wmaybe-uninitialized]
if (hole_length != 0 is_compressed)
^
xloginsert.c:497:10: note: ‘hole_length’ was declared here
uint16 hole_length;
-
The compiler seems to be confused probably because the code is
structured like this:
{
uint16hole_length;
uint16hole_offset;
if (needs_backup)
{
... initialize hole_length/hole_offset ...
}
if (needs_data)
{
...
}
if (needs_backup)
{
... use hole_length/hole_offset ...
}
}
and does not realize the two blocks referencing the variables use the
same condition.
Initializing the variables at the very beginning (and simplifying the
first block a bit) seems like a good fix - patch attached.
--
Tomas Vondrahttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training Services
diff --git a/src/backend/access/transam/xloginsert.c b/src/backend/access/transam/xloginsert.c
index fb39e70..3f56d14 100644
--- a/src/backend/access/transam/xloginsert.c
+++ b/src/backend/access/transam/xloginsert.c
@@ -494,8 +494,8 @@ XLogRecordAssemble(RmgrId rmid, uint8 info,
XLogRecordBlockCompressHeader cbimg;
bool samerel;
bool is_compressed = false;
- uint16 hole_length;
- uint16 hole_offset;
+ uint16 hole_length = 0;
+ uint16 hole_offset = 0;
if (!regbuf-in_use)
continue;
@@ -546,7 +546,8 @@ XLogRecordAssemble(RmgrId rmid, uint8 info,
/*
* The page needs to be backed up, so calculate its hole length
- * and offset.
+ * and offset, but only if it's a standard page header, and if
+ * there actually is a hole to compress out.
*/
if (regbuf-flags REGBUF_STANDARD)
{
@@ -561,18 +562,6 @@ XLogRecordAssemble(RmgrId rmid, uint8 info,
hole_offset = lower;
hole_length = upper - lower;
}
-else
-{
- /* No hole to compress out */
- hole_offset = 0;
- hole_length = 0;
-}
- }
- else
- {
-/* Not a standard page header, don't try to eliminate hole */
-hole_offset = 0;
-hole_length = 0;
}
/*
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers