pgpool2.git / summary / log / commit / refs
commit d339cf86055b0cedaff2ab043ca474579660541f
Author: Tatsuo Ishii <ishii@sraoss.co.jp>
Date: Thu Oct 03 12:33:09 2019 +0000
Fix signal unblock leak in failover.
When failover event occurs, register_node_operation_request() gets
called to en-queue failover/failback requests. If the request queue is
full, this function returns false with unlocking semaphore. But it
forgot to unblock signal mask. This leads to block all signals
including SITERM, which makes pgpool fail to shutdown.
Discussion: https://www.pgpool.net/pipermail/pgpool-hackers/2019-October/003449.html
src/main/pgpool_main.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/main/pgpool_main.c b/src/main/pgpool_main.c
index fb647dbbd..8bfcfbc9c 100644
--- a/src/main/pgpool_main.c
+++ b/src/main/pgpool_main.c
@@ -537,6 +537,7 @@ register_node_operation_request(POOL_REQUEST_KIND kind, int *node_id_set, int co
if ((Req_info->request_queue_tail - MAX_REQUEST_QUEUE_SIZE) == Req_info->request_queue_head)
{
pool_semaphore_unlock(REQUEST_INFO_SEM);
+ POOL_SETMASK(&oldmask);
return false;
}
Req_info->request_queue_tail++;
[parent: 362bddd9c09e]