From 8fd83a0af98e405085c7e97fd664349706a69aaa Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Fri, 25 May 2018 16:26:31 +0200 Subject: [PATCH 1/4] Small experiment: allow to cancel read ops --- src/backend/commands/copy.c | 4 ++-- src/backend/tcop/postgres.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index ef301b6328add..2512a6d35483a 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -597,7 +597,7 @@ CopyGetData(CopyState cstate, void *databuf, int minread, int maxread) int mtype; readmessage: - HOLD_CANCEL_INTERRUPTS(); + //HOLD_CANCEL_INTERRUPTS(); pq_startmsgread(); mtype = pq_getbyte(); if (mtype == EOF) @@ -608,7 +608,7 @@ CopyGetData(CopyState cstate, void *databuf, int minread, int maxread) ereport(ERROR, (errcode(ERRCODE_CONNECTION_FAILURE), errmsg("unexpected EOF on client connection with an open transaction"))); - RESUME_CANCEL_INTERRUPTS(); + //RESUME_CANCEL_INTERRUPTS(); switch (mtype) { case 'd': /* CopyData */ diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 63a1994e61ed3..df6827d9eac77 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -323,7 +323,7 @@ SocketBackend(StringInfo inBuf) /* * Get message type code from the frontend. */ - HOLD_CANCEL_INTERRUPTS(); + //HOLD_CANCEL_INTERRUPTS(); pq_startmsgread(); qtype = pq_getbyte(); @@ -480,7 +480,7 @@ SocketBackend(StringInfo inBuf) } else pq_endmsgread(); - RESUME_CANCEL_INTERRUPTS(); + //RESUME_CANCEL_INTERRUPTS(); return qtype; } From 7423a5be8f47f0be1b059166f270714cdfa05f75 Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Fri, 25 May 2018 17:13:02 +0200 Subject: [PATCH 2/4] A useful NOTICE --- src/backend/utils/init/postinit.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index eb6960d93fae7..731a59ab584da 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -1161,6 +1161,8 @@ StatementTimeoutHandler(void) { int sig = SIGINT; + + elog(NOTICE, "StatementTimeoutHandler invoked on %d", MyProcPid); /* * During authentication the timeout is used to deal with * authentication_timeout - we want to quit in response to such timeouts. From b59992eeadcecc2995e59a2f8e98d7179abfbaed Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Fri, 25 May 2018 17:33:25 +0200 Subject: [PATCH 3/4] Another useful NOTICE --- src/backend/tcop/postgres.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index df6827d9eac77..1d815c9bc5a0e 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -2649,6 +2649,8 @@ StatementCancelHandler(SIGNAL_ARGS) { int save_errno = errno; + elog(NOTICE, "StatementCancelHandler invoked on %d", MyProcPid); + /* * Don't joggle the elbow of proc_exit */ From b5db9c2acfbc7d3aeb152a16ae5f247f2b32f22c Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Fri, 25 May 2018 18:31:18 +0200 Subject: [PATCH 4/4] A tentative fix --- src/backend/tcop/postgres.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 1d815c9bc5a0e..582eafc24b23a 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -2664,6 +2664,7 @@ StatementCancelHandler(SIGNAL_ARGS) SetLatch(MyLatch); errno = save_errno; + raise(SIGUSR1); } /* signal handler for floating point exception */