On Di, 14 Jun 2016, Bram Moolenaar wrote:

> Christian Brabandt wrote:
> 
> > On Mo, 13 Jun 2016, Christian Brabandt wrote:
> > 
> > > Something between 7.4.1924 and 7.4.1926 broke the daily binary built:
> > > 
> > > ..\gvim -u dos.vim -U NONE --noplugin --not-a-term "+set ff=dos|f 
> > > dostmp\test58.in|wq" test58.in
> > >     move test58.in test58.in.bak
> > >         1 file(s) moved.
> > >     copy dostmp\test58.in test58.in
> > >         1 file(s) copied.
> > >     copy test58.ok test.ok
> > >         1 file(s) copied.
> > >     ..\gvim -u dos.vim -U NONE --noplugin --not-a-term -s dotest.in 
> > > test58.in
> > > NMAKE : fatal error U1077: '..\gvim.EXE' : return code '0xc0000005'
> > > Stop.
> > > 
> > > I rebuild that commit 3 times and it always breaks at that step for the
> > > 32bit build. Does anybody know, what that means?
> > 
> > I think the crash happens in the quit command of the test58.in file 
> > (function TestOne(), line 28)
> > 
> > ,----
> > |   " list all valid words
> > |   spelldump
> > |   %yank
> > |   quit
> > |   $put
> > `----
> > 
> > 
> > I stepped into it using a debugger, and I think the stacktrace shows, 
> > that the crash happens in:
> > win_free(), when calling perl_win_free()
> > Stacktrace (sorry, only screenshot):
> > http://i.imgur.com/fzmHS9r.png
> > 
> > Sorry, don't know how to further debug this.
> > 
> > If someone wants knows how to debug it,
> > you can download a broken Gvim here:
> > https://github.com/chrisbra/vim-win32-installer/releases/tag/v7.4.1934_test
> > (only happens with the x86 versions).
> 
> Hmm, since the test does not use Perl at all, w_perl_private should not
> have been set.  If it's not NULL then perhaps it was corrupted?
> Perhaps if you step into perl_win_free() you can see what the value is?
> 
> You could try commenting out the call to perl_win_free() and see if it
> finishes properly or then crashe somewhere else (e.g., when using other
> pointers next to w_perl_private, e.g. w_python_ref or w_mzscheme_ref).
> 
> If you can set a watch point in this debugger, watching w_perl_private
> might also reveal something.

It happens in mark.c:

   174     /* If jumplist is full: remove oldest entry */
   175     if (++curwin->w_jumplistlen > JUMPLISTSIZE)
   176     {
   177         curwin->w_jumplistlen = JUMPLISTSIZE;
   178         vim_free(curwin->w_jumplist[0].fname);
   179         for (i = 1; i < JUMPLISTSIZE; ++i)
   180             curwin->w_jumplist[i - 1] = curwin->w_jumplist[i];
   181     }
   182     curwin->w_jumplistidx = curwin->w_jumplistlen;
   183     fm = &curwin->w_jumplist[curwin->w_jumplistlen - 1];
   184
   185     fm->fmark.mark = curwin->w_pcmark;
   186     fm->fmark.fnum = curbuf->b_fnum;
   187     fm->fname = NULL;
   188 # ifdef FEAT_VIMINFO
   189     fm->time_set = vim_time();
   190 # endif
   191 #endif

somehow, w_jumplistlen isn't incremented, then fm access curwin->w_jumplist[-1]
this goes on, until w_jumplistlen gets overwritten to a really high value which
later causes curwin->w_perl_private to be set to 1.

I don't understand why this happens, I tried adding some check statements, so 
that
curwin->w_jumplistlen is always positive, but this didn't help for some reason.

Don't know how to further help here.

Best,
Christian
-- 
Stilblüten aus Schreiben von Versicherungsnehmern:
Leider ist mein Vater der Jagdleidenschaft Dritter zum Opfer
gefallen. Man hielt ihn für eine Wildsau und schoß ihn an.

-- 
-- 
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

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui