diff --git a/src/backend/tcop/fastpath.c b/src/backend/tcop/fastpath.c index 2efed951328..5f272d84485 100644 --- a/src/backend/tcop/fastpath.c +++ b/src/backend/tcop/fastpath.c @@ -249,24 +249,15 @@ fetch_fp_info(Oid func_id, struct fp_info * fip) * This corresponds to the libpq protocol symbol "F". * * INPUT: - * In protocol version 3, postgres.c has already read the message body - * and will pass it in msgBuf. - * In old protocol, the passed msgBuf is empty and we must read the - * message here. - * - * RETURNS: - * 0 if successful completion, EOF if frontend connection lost. - * - * Note: All ordinary errors result in ereport(ERROR,...). However, - * if we lose the frontend connection there is no one to ereport to, - * and no use in proceeding... + * postgres.c has already read the message body and will pass it in + * msgBuf. * * Note: palloc()s done here and in the called function do not need to be * cleaned up explicitly. We are called from PostgresMain() in the * MessageContext memory context, which will be automatically reset when * control returns to PostgresMain. */ -int +void HandleFunctionRequest(StringInfo msgBuf) { Oid fid; @@ -281,9 +272,8 @@ HandleFunctionRequest(StringInfo msgBuf) char msec_str[32]; /* - * Now that we've eaten the input message, check to see if we actually - * want to do the function call or not. It's now safe to ereport(); we - * won't lose sync with the frontend. + * We only accept COMMIT/ABORT if we are in an aborted transaction, and + * COMMIT/ABORT cannot be executed through the fastpath interface. */ if (IsAbortedTransactionBlockState()) ereport(ERROR, @@ -406,8 +396,6 @@ HandleFunctionRequest(StringInfo msgBuf) msec_str, fip->fname, fid))); break; } - - return 0; } /* diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index a2282058c0d..41801f14391 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -4164,19 +4164,7 @@ PostgresMain(int argc, char *argv[], /* switch back to message context */ MemoryContextSwitchTo(MessageContext); - if (HandleFunctionRequest(&input_message) == EOF) - { - /* lost frontend connection during F message input */ - - /* - * Reset whereToSendOutput to prevent ereport from - * attempting to send any more messages to client. - */ - if (whereToSendOutput == DestRemote) - whereToSendOutput = DestNone; - - proc_exit(0); - } + HandleFunctionRequest(&input_message); /* commit the function-invocation transaction */ finish_xact_command(); diff --git a/src/include/tcop/fastpath.h b/src/include/tcop/fastpath.h index af1e330f18f..81d94913db8 100644 --- a/src/include/tcop/fastpath.h +++ b/src/include/tcop/fastpath.h @@ -16,6 +16,6 @@ #include "lib/stringinfo.h" extern int GetOldFunctionMessage(StringInfo buf); -extern int HandleFunctionRequest(StringInfo msgBuf); +extern void HandleFunctionRequest(StringInfo msgBuf); #endif /* FASTPATH_H */