Lech Lorens wrote:

> The attached patch fixes an E315 error that occurs for me sometimes
> when I work in Athena gvim under Cygwin.
> The stack trace when the problem occurs is as follows:
> 
> #0  ml_get_buf (buf=0x8005b6e8, lnum=124, will_change=0) at memline.c:2435
> #1  0x0049a8ad in ml_get_pos (pos=0x289cb4) at memline.c:2388
> #2  0x004c92be in do_pending_operator (cap=0x289c58, old_col=0,
> gui_yank=1) at normal.c:1823
> #3  0x004debf5 in clip_get_selection (cbd=0x5e7b40) at ops.c:5924
> #4  0x0055b8a8 in clip_x11_convert_selection_cb (w=0x80071588,
> sel_atom=0x28a1ec, target=0x289ddc,
>     type=0x289df0, value=0x289dfc, length=0x289df8, format=0x289df4)
> at ui.c:2307
> #5  0x69a2170e in cygXt-6!_
> XtResourceListInitialize () from /usr/bin/cygXt-6.dll
> #6  0x69a21bd3 in cygXt-6!_XtResourceListInitialize () from 
> /usr/bin/cygXt-6.dll
> #7  0x69a0e8f0 in cygXt-6!XtDispatchEventToWidget () from /usr/bin/cygXt-6.dll
> #8  0x69a0ecc1 in cygXt-6!_XtOnGrabList () from /usr/bin/cygXt-6.dll
> #9  0x69a0f0d6 in cygXt-6!XtDispatchEvent () from /usr/bin/cygXt-6.dll
> #10 0x69a1973d in cygXt-6!XtAppProcessEvent () from /usr/bin/cygXt-6.dll
> #11 0x00578bfb in gui_mch_update () at gui_x11.c:2828
> #12 0x00558e8b in ui_breakcheck () at ui.c:364
> #13 0x004b53a9 in fast_breakcheck () at misc1.c:9187
> #14 0x00502532 in regmatch (scan=0x8005cf2f "\005") at regexp.c:4077
> #15 0x005022c6 in regtry (prog=0x8005cf08, col=1) at regexp.c:3945
> #16 0x005020d8 in vim_regexec_both (line=0x80194a96 "#include
> <speex/speex_jitter.h>", col=1, tm=0x0)
>     at regexp.c:3834
> #17 0x00501be5 in vim_regexec_multi (rmp=0x28a4c0, win=0x8029c220,
> buf=0x8005b6e8, lnum=5, col=0,
>     tm=0x0) at regexp.c:3643
> #18 0x00542f33 in syn_regexec (rmp=0x28a4c0, lnum=5, col=0) at syntax.c:3238
> #19 0x005411ea in syn_current_attr (syncing=0, displaying=1,
> can_spell=0x0, keep_state=0)
>     at syntax.c:2071
> #20 0x00540bf6 in get_syntax_attr (col=0, can_spell=0x0, keep_state=0)
> at syntax.c:1830
> #21 0x0050dee8 in win_line (wp=0x8029c220, lnum=5, startrow=4,
> endrow=64, nochange=1) at screen.c:4090
> #22 0x0050a075 in win_update (wp=0x8029c220) at screen.c:1861
> #23 0x00507fa8 in update_screen (type=40) at screen.c:536
> #24 0x00507ac6 in update_curbuf (type=20) at screen.c:314
> #25 0x0058e30a in main_loop (cmdwin=0, noexmode=0) at main.c:1209
> #26 0x0058df72 in main (argc=3, argv=0x28ac60) at main.c:1014
> 
> What happens is while the screen is being updated, vim_regexec_multi()
> temporarily replaces the value of curbuf and proceeds with a call to
> vim_regexec_both(). Since regmatch() can take a long time to complete,
> it can be interrupted by pressing Ctrl-C. For this to be possible, Vim
> handles pending UI events. Among these events is a request to get the
> current selection. This is where the contents of curbuf are accessed
> with coordinates taken from curwin. Since vim_regexec_multi() replaced
> the value of curbuf, the data pointed to by curbuf is inconsistent
> with the data pointed to by curwin. This can cause the E315 error.

Thanks, I have added it to the todo list.

-- 
Your fault: core dumped

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui