Martin Vermeer wrote:

> 
>> Yes, I am getting the attached full output.
>> 
>> Note (line 175) that the screen redraw is pre-empted by processing the
>> character 'a'... so it doesn't get around to calling doneUpdating.
>> 
>> Then, at line 604, it finally comes tumbling from the sky ;-)
>> 
>> I expect this would work fine if we could, in coordcache, turn bool
>> updating into int updating, counting the number of screen redraws we
>> have pending.
>> 
>> Andre, does that make sense to you?
>> 
>> - Martin
> 
> This fixes the first crash reported by Juergen.
> 
> It turns out BufferView::update() can in fact be called multiple times
> at the same time, if you press keys fast enough. I wonder if this is
> supposed to be. Anyway, making the handling of the coordinate cache
> re-entrant fixes the bug. This requires "updating" to be a counter
> rather than a bool.
> 
> Tell me if I should be happy with this; I'm not so sure.

(Looking at the correct attachment...)

This patch looks completely reasonable. It would be interesting to find 
out the source of the bv.update() within bv.update() calls. One candidate 
would be the graphics loading stuff which report their changed status by 
calling
     LyX::cref().updateInset(this);
which ends up calling bv.update().

-- 
Angus

Reply via email to