Re: [patch] Fix testsuite annotate-quit race (PR 544)

Chet Ramey
2008-03-25T15:56:48Z

Daniel Jacobowitz wrote:
> On Mon, Mar 24, 2008 at 09:01:30PM -0400, Chet Ramey wrote:
>> Daniel Jacobowitz wrote:
>>
>>> What I think is happening is that rl_redisplay has some optimizations
>>> which cause it not to redisplay. And since we have a custom function
>>> installed readline isn't calling the alternate hooks that force
>>> display. So rl_redisplay does not actually meet the interface
>>> associated with rl_redisplay_function despite being its default
>>> value. Nasty.
>> That's interesting, if true. Can anyone add detail confirming this?
>
> Sure. There's a check "rl_redisplay_function == rl_redisplay" in the
> readline source, and another in the definition of
> CUSTOM_REDISPLAY_FUNCTION. So that function is inherently special.
>
> From what Nick and Jan have found, stty -echo and then running GDB
> with a custom redisplay function that just calls rl_redisplay
> will not display the GDB prompt.

You were pretty close to the answer; had you looked at the source
around the check you identified, you would have found it
(readline.c:readline_internal_setup()):

/* If we're not echoing, we still want to at least print a prompt, because
rl_redisplay will not do it for us. If the calling application has a
custom redisplay function, though, let that function handle it. */
if (readline_echoing_p == 0 && rl_redisplay_function == rl_redisplay)
{
if (rl_prompt && rl_already_prompted == 0)
{
nprompt = _rl_strip_prompt (rl_prompt);
fprintf (_rl_out_stream, "%s", nprompt);
fflush (_rl_out_stream);
free (nprompt);
}
}

You've turned off echo, and the redisplay code won't print anything in that
case. Readline, when using its internal redisplay function, chooses to
print a prompt to at least visually clue the user that it's around.
Having accepted responsibility for handling redisplay, gdb can do whatever
it deems appropriate.

Chet
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
Live Strong. No day but today.
Chet Ramey, ITS, CWRU chet@case.edu http://cnswww.cns.cwru.edu/~chet/