Xavier de Gaye wrote:

> >> >> Problem:
> >> >> --------
> >> >> Vim version 7.1.298 on linux.
> >> >> Vim crashes processing received netbeans messages while redrawing the
> >> >> windows. This happens about once every five times when running the
> >> >> [...]
> >> >> The following tests have been completed successfully with this patch:
> >> >>     * no Vim crash with the pyclewn test case
> >> >>     * no error reported by Valgrind with the pyclewn test case
> >> >>     * Vim does not crash when doing fast stepping with clewn
> >> >>     * netbeans does process messages when Vim is idle in normal_cmd()
> >> >>     * the full pyclewn regression test suite runs Ok.
> >> >> [...]
> >> >
> >> > This will help, but I think it's still possible that Vim is updating the
> >> > screen somewhere when a netbeans event is received.  In functions called
> >> > from normal_cmd() it's very well possible that the screen is updated
> >> > directly instead of setting the must_redraw flag.
> >> >
> >> > One way to solve this is to set that callback_restricted flag in
> >> > ui_breakcheck().  Because we don't want to handle the netbeans messages
> >> > while checking if the user typed CTRL-C.
> >> >
> >> > It might still not be sufficient though.  It's difficult to overview
> >> > what happens with these asynchronous messages.  And we also have to be
> >> > careful not to block event handling (I think that happens when you would
> >> > use the may_garbage_collect flag).
> >> >
> >> > Perhaps you can try out the change to ui_breakcheck() and tell us what
> >> > happens.  Perhaps there are other places where gui_mch_update() is
> >> > called and we don't want to handle events, thus setting the flag in
> >> > gui_mch_update() might be an alternative.  But you can't do that
> >> > always...
> >>
> >> Setting the callback_restricted flag in ui_breakcheck() does not work.
> >> Most pyclewn automated tests fail because the netbeans messages are
> >> received (and queued) in ui_breakcheck() and nb_parse_messages() never
> >> gets a chance to process the received messages. This points out to
> >> a problem that may occur when netbeans is run interactively: if the
> >> last netbeans message is received in ui_breakcheck(), it is not
> >> processed by nb_parse_messages() and appears to the user as not
> >> received at all (until the next message arrives).
> >> Except for that problem, this solution fixes the memory corruption as
> >> expected in all the tests that do run.
> >>
> >> Another way to fix this is to prevent the netbeans callback to call
> >> any vim function at all. This cancels the need of a global
> >> callback_restricted flag. The callback queues the received messages
> >> and exit the gui event loop. The messages are processed in the idle
> >> loop where vim is waiting for character input.
> >>
> >> The following patch (also attached to this mail) implements this
> >> solution for FEAT_GUI_GTK. All the tests are successful (see the list
> >> of tests above, in the original post) including the 51 pyclewn tests.
> >
> > This makes sense.  I'll put this in the todo list for having a closer
> > look.
> >
> >> I think it is possible to implement the same solution for
> >> FEAT_GUI_W32, but Windows support in pyclewn is not ready yet and I
> >> don't know what application can be used to test the patch (maybe Agide ?).
> >
> > This should not be changed without proper testing.  So let's leave it
> > as-is until we can test it.
> 
> 
> The problem of "Netbeans events are handled while updating the screen,
> causing a crash" has been fixed in Vim 7.2 for gtk. The attached patch
> to Vim 7.2.55 (subversion revision 1273) fixes this same problem for
> Windows.
> 
> The following tests have been completed successfully with this patch
> and pyclewn version 0.6 on Windows:
>     * Vim processes netbeans messages when idle
>     * the full pyclewn regression test suite runs Ok
> 
> Note that the crash could not be reproduced with Vim 7.2 and pyclewn,
> as the current implementation of pyclewn on Windows is too slow.

Thanks for the patch.  Looks OK to me, although I can't try it out.
I'll include it.

-- 
This is the polymorph virus!  Follow these instructions carefully:
1. Send this message to everybody you know.
2. Format your harddisk.
Thank you for your cooperation in spreading the most powerful virus ever!

 /// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui