Re: Remove unnecessary code from psql's watch command - Mailing list pgsql-hackers

From Tom Lane
Subject Re: Remove unnecessary code from psql's watch command
Date
Msg-id 169207.1709748219@sss.pgh.pa.us
Whole thread Raw
In response to Re: Remove unnecessary code from psql's watch command  (Michael Paquier <michael@paquier.xyz>)
Responses Re: Remove unnecessary code from psql's watch command
List pgsql-hackers
Michael Paquier <michael@paquier.xyz> writes:
> On Tue, Mar 05, 2024 at 10:05:52PM +0900, Yugo NAGATA wrote:
>> In the current code of do_watch(), sigsetjmp is called if WIN32
>> is defined, but siglongjmp is not called in the signal handler
>> in this condition. On Windows, currently, cancellation is checked
>> only by cancel_pressed, and  calling sigsetjmp in do_watch() is
>> unnecessary. Therefore, we can remove code around sigsetjmp in
>> do_watch(). I've attached the patch for this fix.

> Re-reading the top comment of sigint_interrupt_enabled, it looks like
> you're right here.  As long as we check for cancel_pressed there
> should be no need for any special cancellation handling here.

I don't have Windows here to test on, but does the WIN32 code
path work at all?  It looks to me like cancel_pressed becoming
true doesn't get us to exit the outer loop, only the inner delay
one, meaning that trying to control-C out of a \watch will just
cause it to repeat the command even faster.  That path isn't
setting the "done" variable, and it isn't checking it either,
because all of that only happens in the other #ifdef arm.

            regards, tom lane



pgsql-hackers by date:

Previous
From: Bertrand Drouvot
Date:
Subject: Re: Fix race condition in InvalidatePossiblyObsoleteSlot()
Next
From: Jelte Fennema-Nio
Date:
Subject: Re: [EXTERNAL] Re: Add non-blocking version of PQcancel