1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-27 23:21:58 +03:00

Fix bad interaction between NOTIFY processing and V3 extended query

protocol, per report from Igor Shevchenko.  NOTIFY thought it could
do its thing if transaction blockState is TBLOCK_DEFAULT, but in
reality it had better check the low-level transaction state is
TRANS_DEFAULT as well.  Formerly it was not possible to wait for the
client in a state where the first is true and the second is not ...
but now we can have such a state.  Minor cleanup in StartTransaction()
as well.
This commit is contained in:
Tom Lane
2003-10-16 16:50:41 +00:00
parent 839cea8814
commit 90b2202975
4 changed files with 37 additions and 24 deletions

View File

@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.101 2003/10/01 21:30:52 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.102 2003/10/16 16:50:41 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -91,10 +91,6 @@
#include "utils/syscache.h"
/* stuff that we really ought not be touching directly :-( */
extern TransactionState CurrentTransactionState;
/*
* State for outbound notifies consists of a list of all relnames NOTIFYed
* in the current transaction. We do not actually perform a NOTIFY until
@ -717,7 +713,7 @@ Async_NotifyHandler(SIGNAL_ARGS)
void
EnableNotifyInterrupt(void)
{
if (CurrentTransactionState->blockState != TRANS_DEFAULT)
if (IsTransactionOrTransactionBlock())
return; /* not really idle */
/*