aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/rmgrdesc/xactdesc.c9
-rw-r--r--src/include/access/xact.h5
2 files changed, 9 insertions, 5 deletions
diff --git a/src/backend/access/rmgrdesc/xactdesc.c b/src/backend/access/rmgrdesc/xactdesc.c
index 3297e1d3790..cac1df8e07a 100644
--- a/src/backend/access/rmgrdesc/xactdesc.c
+++ b/src/backend/access/rmgrdesc/xactdesc.c
@@ -104,10 +104,13 @@ ParseCommitRecord(uint8 info, xl_xact_commit *xlrec, xl_xact_parsed_commit *pars
if (parsed->xinfo & XACT_XINFO_HAS_ORIGIN)
{
- xl_xact_origin *xl_origin = (xl_xact_origin *) data;
+ xl_xact_origin xl_origin;
- parsed->origin_lsn = xl_origin->origin_lsn;
- parsed->origin_timestamp = xl_origin->origin_timestamp;
+ /* we're only guaranteed 4 byte alignment, so copy onto stack */
+ memcpy(&xl_origin, data, sizeof(xl_origin));
+
+ parsed->origin_lsn = xl_origin.origin_lsn;
+ parsed->origin_timestamp = xl_origin.origin_timestamp;
data += sizeof(xl_xact_origin);
}
diff --git a/src/include/access/xact.h b/src/include/access/xact.h
index ed808fc1505..668e987f488 100644
--- a/src/include/access/xact.h
+++ b/src/include/access/xact.h
@@ -173,7 +173,8 @@ typedef struct xl_xact_assignment
* by a set XLOG_XACT_HAS_INFO bit in the xl_info field.
*
* NB: All the individual data chunks should be sized to multiples of
- * sizeof(int) and only require int32 alignment.
+ * sizeof(int) and only require int32 alignment. If they require bigger
+ * alignment, they need to be copied upon reading.
*/
/* sub-records for commit/abort */
@@ -237,7 +238,7 @@ typedef struct xl_xact_commit
/* xl_xact_relfilenodes follows if XINFO_HAS_RELFILENODES */
/* xl_xact_invals follows if XINFO_HAS_INVALS */
/* xl_xact_twophase follows if XINFO_HAS_TWOPHASE */
- /* xl_xact_origin follows if XINFO_HAS_ORIGIN */
+ /* xl_xact_origin follows if XINFO_HAS_ORIGIN, stored unaligned! */
} xl_xact_commit;
#define MinSizeOfXactCommit (offsetof(xl_xact_commit, xact_time) + sizeof(TimestampTz))