summaryrefslogtreecommitdiff
path: root/src/backend/replication/walreceiver.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/replication/walreceiver.c')
-rw-r--r--src/backend/replication/walreceiver.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c
index ecb2c3a6d39..b31cfb4147d 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -29,7 +29,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/replication/walreceiver.c,v 1.10 2010/04/20 22:55:03 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/replication/walreceiver.c,v 1.11 2010/06/03 22:17:32 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -41,6 +41,7 @@
#include "access/xlog_internal.h"
#include "libpq/pqsignal.h"
#include "miscadmin.h"
+#include "replication/walprotocol.h"
#include "replication/walreceiver.h"
#include "storage/ipc.h"
#include "storage/pmsignal.h"
@@ -393,18 +394,18 @@ XLogWalRcvProcessMsg(unsigned char type, char *buf, Size len)
{
case 'w': /* WAL records */
{
- XLogRecPtr recptr;
+ WalDataMessageHeader msghdr;
- if (len < sizeof(XLogRecPtr))
+ if (len < sizeof(WalDataMessageHeader))
ereport(ERROR,
(errcode(ERRCODE_PROTOCOL_VIOLATION),
errmsg_internal("invalid WAL message received from primary")));
+ /* memcpy is required here for alignment reasons */
+ memcpy(&msghdr, buf, sizeof(WalDataMessageHeader));
+ buf += sizeof(WalDataMessageHeader);
+ len -= sizeof(WalDataMessageHeader);
- memcpy(&recptr, buf, sizeof(XLogRecPtr));
- buf += sizeof(XLogRecPtr);
- len -= sizeof(XLogRecPtr);
-
- XLogWalRcvWrite(buf, len, recptr);
+ XLogWalRcvWrite(buf, len, msghdr.dataStart);
break;
}
default: