[slim-vim] More details on the socket crash bug
Larry Clapp
larry at theclapp.org
Tue Jun 13 08:55:25 CDT 2006
On Mon, Jun 12, 2006 at 08:40:43AM -0700, Brad Beveridge wrote:
> On 6/12/06, Larry Clapp <larry at theclapp.org> wrote:
> > Okay, I tried your code, and I observed the following behavior:
> >
> > In test.lisp,
> >
> > (progn
> > (dotimes (x 10)
> > (format *stream* "hello ~D~%" x)))
> >
> > printed these lines in the serverstream lisp scratch buffer:
> >
> > "hello 0"
> > "hello 1"
> > "hello 2"
> > "hello 3"
> > "hello 4"
> > "hello 5"
> > "hello 6"
> > "hello 7"
> > "hello 8"
> > "hello 9"
> >
> > but printed only
> >
> > "\"hello 0\""
> > "\"hello 1\""
> >
> > (or up to 0, or 3, or 7, but rarely if ever the whole 10 lines) in
> > the test.lisp lisp scratch buffer, until I pressed at least two
> > keys. I'd press one key (e.g. "h"), and the rest of the lines
> > would show up. I'd press it again, and the cursor would show back
> > up in the test.lisp buffer. Funky.
> Did you see the "oh my god the world has crashed" bug?
No.
> I needed to up the amount of data to about 1000 format calls. I
> also noticed the keypress thing, it is like Vim is blocking
> elsewhere? The keypress might be important. What I suspect may be
> happening (though I don't know how) is that the ECL interpreter is
> being re-entered, and it is not at all happy about it.
I would instead suspect something's up with the network code.
On the other hand, I'm not sure what you mean by "the ECL interpreter
is being re-entered", and since I don't really understand your
assertion, I can't really say "I disagree", can I? :)
We have (at least) Vim (main loop; polls network) calling ECL (network
callback) calling Vim (append text to buffer); do you mean you're
concerned that maybe the append text calls more ECL code? I haven't
checked, but that's certainly possible. I wouldn't expect it to cause
problems, but maybe I'm wrong. :)
> > I would suggest the following methodology, testing at each step,
> > and saving snapshots at the end of each step: 1) get the client
> > (test) / server (serverstream) code to work in ECL only (not run
> > under Vim) just to make sure you have the plain networking code
> > working. 2) Import the server code into Vim; have it talk to the
> > ECL-only client. 3) Change the client code to write to a string.
> > 4) Import the client code into Vim; have it talk to the ECL-only
> > server. 5a) test the vim-buffer-output-stream apart from the
> > client/server code; 5b) change the client code to append to a Vim
> > buffer. 6) Change the client code to talk to the Vim server.
> The code won't (I don't think) port easily to ECL, there is no
> callback on data present feature that I am aware of. Though the
> server can certainly sit in a polling loop.
Yeah, I meant just one side sending and the other side polling.
> #2 - I've sort of done this. If the server doesn't echo back to the
> client, then all is well, the server can get messages all day long
> from the TEST client. Admittedly, TEST was running in ECL in Vim,
> but without issues.
>
> #3 - I've also altered the clientside callback to do nothing but
> pull data from the socket during the callback - this eventually
> breaks.
>
> #4 - Could be a good idea. But remember that this bug happens
> during Swank communications where effectively the echo server is
> Swank.
>
> #5a - I've come to believe that vim-buffer-output-stream isn't
> responsible for this particular bug.
Okay.
> > I may do some work on this, or I may adapt some of my own Vim
> > networking code to work with sb-bsd-sockets, and try that.
> Would you mind testing your networking code in my harness? I'm
> expecting similar results, but you never know :)
I would not mind. I haven't done so yet. I live near Tampa, FL;
Tropical Storm Alberto has a lot of my attention. :)
-- L
More information about the slim-vim
mailing list