On Sun, Feb 14, 2016 at 2:31 AM, Bram Moolenaar <[email protected]> wrote:

>
> Yukihiro Nakadaira wrote:
>
> > On Sat, Feb 13, 2016 at 8:20 PM, Yukihiro Nakadaira <
> > [email protected]> wrote:
> >
> > > On Sat, Feb 13, 2016 at 5:36 AM, Christian Brabandt <
> [email protected]>
> > > wrote:
> > >
> > >> Hi Bram!
> > >>
> > >> On Fr, 12 Feb 2016, Bram Moolenaar wrote:
> > >>
> > >> >
> > >> > Patch 7.4.1306
> > >> > Problem:    Job control doesn't work well on MS-Windows.
> > >> > Solution:   Various fixes. (Ken Takata, Ozaki Kiichi , Yukihiro
> > >> Nakadaira,
> > >> >             Yasuhiro Matsumoto)
> > >> > Files:      src/Make_mvc.mak, src/eval.c, src/os_unix.c,
> src/os_win32.c,
> > >> >             src/proto/os_unix.pro, src/proto/os_win32.pro,
> > >> src/structs.h
> > >>
> > >> This patch breaks appveyor (I assume the test_channel test)
> > >> https://ci.appveyor.com/project/chrisbra/vim/build/602
> > >>
> > >
> > > Crash is caused by WM_NETBEANS message issued by WSAAsyncSelect().
> > >
> > >
> > > let h = job_start('py testdir/test_channel.py')
> > > let port = []
> > > sleep 1
> > > let port = readfile('Xportnr')
> > > call delete('Xportnr')
> > > let c = ch_open('localhost:' . port[0])
> > >
> > > echo ch_sendexpr(c, 'hello!')
> > > " => request(hello!)
> > > " <= response(got it)     (Raise WM_NETBEANS and it remains in message
> > > queue)
> > >
> > > call job_stop(h)
> > > " Remote socket is closed.
> > >
> > > ":sleep 1
> > > " Catch WM_NETBEANS.  But socket is already closed.
> > > " E896: read from channel: A non-blocking socket operation could not be
> > > completed immediately.
> > >
> > > for i in range(1000)
> > >   try
> > >     throw "err"
> > >   catch
> > >     " When WM_NETBEANS is catched in ex_catch(), it breaks memory.
> > >     "   ex_catch():
> > >     "   1585                     caught = vim_regexec_nl(&regmatch,
> > > current_exception->value,
> > >     "   1586                             (colnr_T)0);
> > >     " gui_mch_update() is executed in vim_regexec_nl().  And error is
> > > thrown.
> > >     "   read_channel():
> > >     "   1262             PERROR(_("E896: read from channel"));
> > >     " And current_exception is free()ed.
> > >     "   cause_errthrow():
> > >     "   228         discard_current_exception();
> > >     " And the freed memory is used later.
> > >   endtry
> > > endfor
> > >
> >
> >
> > Maybe this patch fix this problem.
> > Error is still shown.  But it might implies script or server bug.
> >
> > diff --git a/src/gui_w48.c b/src/gui_w48.c
> > index 7789ef2..f2d2091 100644
> > --- a/src/gui_w48.c
> > +++ b/src/gui_w48.c
> > @@ -1783,7 +1783,14 @@ process_message(void)
> >   int channel_idx = channel_socket2idx((sock_T)msg.wParam);
> >
> >   if (channel_idx >= 0)
> > +        {
> > +     int suppress_errthrow_save;
> > +
> > +     suppress_errthrow_save = suppress_errthrow;
> > +     suppress_errthrow = TRUE;
> >       channel_read(channel_idx);
> > +     suppress_errthrow = suppress_errthrow_save;
> > +        }
> >   return;
> >      }
> >  #endif
>
> Thanks for the explanation.  Doing this low-level exception stuff here
> doesn't seem right.  Perhaps this works:
>
>         if (channel_idx >= 0)
>         {
>             /* Disable error messages, they can mess up the display and
> throw
>              * an exception. */
>             ++emsg_off;
>             channel_read(channel_idx, FALSE, "process_message");
>             --emsg_off;
>         }
>
> I'll try it out.  Now that the log is implement that can be used to find
> communication errors, instead of displaying them.  That can happen at
> any time and interrupt what the user was doing.
>
> Hmm, I can't seem to reproduce the problem anymore.  The changes I made
> to support pipes may have fixed the problem as a side effect.
>
> You mention "freed memory is used later", is there another problem that
> should be fixed?
>

No, there isn't.

-- 
Yukihiro Nakadaira - [email protected]

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