On 10/11/22 11:19, Chet Ramey wrote:
> On 9/30/22 11:11 AM, Chet Ramey wrote:
>> On 9/20/22 3:13 PM, Simon Marchi wrote:
>>
>>> I think that it could be fixed in readline by doing the following when
>>> reinstalling the old signal handlers:
>>>
>>>   - block signals
>>>   - call RL_CHECK_SIGNALS
>>>   - restore old handlers
>>>   - unblock signals
>>
>> Readline could probably get most or all of the way there by modifying
>> CALLBACK_READ_RETURN to call rl_check_signals/RL_CHECK_SIGNALS after
>> calling rl_clear_signals and before the return. What do you think?
> 
> I'm getting back to looking at this. I've attached a patch that does this.
> Try it out and let me know.

Hi Chet,

As far as I understand, this is equivalent to the fix we've done in GDB
here:

  
https://gitlab.com/gnutools/binutils-gdb/-/commit/faf01aee1d03aef5b6f95fd0db358bf5e70578f9

So, it seems fine to me.

While reviewing this code, a question popped: given that readline only
records a single signal number in _rl_caught_signal, what happens if two
different signals (say, SIGINT and SIGWINCH) arrive in between two
RL_CHECK_SIGNALS?  Won't it cause the second signal number to overwrite
the first one, and the first one to be missed?

Simon

Reply via email to