diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2015-06-28 22:25:55 +0300 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2015-06-28 22:30:39 +0300 |
commit | a32c3ec893cafbd3a4b42c34270a80198f28f123 (patch) | |
tree | 2a3b1a51b3cdb338cc9ca85cf00fef5660152251 /src/backend/access/transam/xloginsert.c | |
parent | a45c70acf35e43257d86313dcbb7bb0e5201fab1 (diff) | |
download | postgresql-a32c3ec893cafbd3a4b42c34270a80198f28f123.tar.gz postgresql-a32c3ec893cafbd3a4b42c34270a80198f28f123.zip |
Promote the assertion that XLogBeginInsert() is not called twice into ERROR.
Seems like cheap insurance for WAL bugs. A spurious call to
XLogBeginInsert() in itself would be fairly harmless, but if there is any
data registered and the insertion is not completed/cancelled properly, there
is a risk that the data ends up in a wrong WAL record.
Per Jeff Janes's suggestion.
Diffstat (limited to 'src/backend/access/transam/xloginsert.c')
-rw-r--r-- | src/backend/access/transam/xloginsert.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/backend/access/transam/xloginsert.c b/src/backend/access/transam/xloginsert.c index b96c39ac657..0b89c0a7a2c 100644 --- a/src/backend/access/transam/xloginsert.c +++ b/src/backend/access/transam/xloginsert.c @@ -122,12 +122,14 @@ XLogBeginInsert(void) Assert(max_registered_block_id == 0); Assert(mainrdata_last == (XLogRecData *) &mainrdata_head); Assert(mainrdata_len == 0); - Assert(!begininsert_called); /* cross-check on whether we should be here or not */ if (!XLogInsertAllowed()) elog(ERROR, "cannot make new WAL entries during recovery"); + if (begininsert_called) + elog(ERROR, "XLogBeginInsert was already called"); + begininsert_called = true; } |