aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/tcop/fastpath.c16
-rw-r--r--src/backend/tcop/postgres.c14
2 files changed, 24 insertions, 6 deletions
diff --git a/src/backend/tcop/fastpath.c b/src/backend/tcop/fastpath.c
index b2c89033530..a4bcead4fc6 100644
--- a/src/backend/tcop/fastpath.c
+++ b/src/backend/tcop/fastpath.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/tcop/fastpath.c,v 1.77 2004/12/31 22:01:16 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/tcop/fastpath.c,v 1.77.4.1 2006/06/11 15:49:46 tgl Exp $
*
* NOTES
* This cruft is the server side of PQfn.
@@ -26,6 +26,7 @@
#include "miscadmin.h"
#include "mb/pg_wchar.h"
#include "tcop/fastpath.h"
+#include "tcop/tcopprot.h"
#include "utils/acl.h"
#include "utils/lsyscache.h"
#include "utils/syscache.h"
@@ -305,13 +306,24 @@ HandleFunctionRequest(StringInfo msgBuf)
"commands ignored until end of transaction block")));
/*
+ * Now that we know we are in a valid transaction, set snapshot in
+ * case needed by function itself or one of the datatype I/O routines.
+ */
+ ActiveSnapshot = CopySnapshot(GetTransactionSnapshot());
+
+ /*
* Begin parsing the buffer contents.
*/
if (PG_PROTOCOL_MAJOR(FrontendProtocol) < 3)
- (void) pq_getmsgstring(msgBuf); /* dummy string */
+ (void) pq_getmsgstring(msgBuf); /* dummy string */
fid = (Oid) pq_getmsgint(msgBuf, 4); /* function oid */
+ if (log_statement == LOGSTMT_ALL)
+ ereport(LOG,
+ (errmsg("fastpath function call: function OID %u",
+ fid)));
+
/*
* There used to be a lame attempt at caching lookup info here. Now we
* just do the lookups on every call.
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index b166e7d9b8e..d7dc8195975 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.440.4.5 2005/12/14 17:06:51 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.440.4.6 2006/06/11 15:49:46 tgl Exp $
*
* NOTES
* this is the "main" module of the postgres backend and
@@ -3161,12 +3161,18 @@ PostgresMain(int argc, char *argv[], const char *username)
/* start an xact for this function invocation */
start_xact_command();
+ /*
+ * Note: we may at this point be inside an aborted
+ * transaction. We can't throw error for that until
+ * we've finished reading the function-call message, so
+ * HandleFunctionRequest() must check for it after doing so.
+ * Be careful not to do anything that assumes we're inside a
+ * valid transaction here.
+ */
+
/* switch back to message context */
MemoryContextSwitchTo(MessageContext);
- /* set snapshot in case function needs one */
- ActiveSnapshot = CopySnapshot(GetTransactionSnapshot());
-
if (HandleFunctionRequest(&input_message) == EOF)
{
/* lost frontend connection during F message input */