Skip to content

@orthecreedence /gist:a2b666419fe220bfae31
Last active

Embed URL


Subversion checkout URL

You can clone with
Download ZIP
ECL socket failure (segfault) test
(ql:quickload :cl-async)
(defpackage :sock-test
(:use :cl)
(:export :delay
(in-package :sock-test)
(defun delay ()
"Use an async delay. This uses the standard cl-async callback mechanism, which
passes a cffi:callback type to libevent that when invoked (by he event loop)
looks up the lambda containing our format statement and runs it.
It works great."
(as:with-event-loop ()
(as:delay (lambda () (format t "~%~%---~%it worked!~%---~%")) :time 3)))
(defun request ()
"Do an async TCP request. This uses the same callback mechanism as as:delay,
but for some reason segfaults."
(as:with-event-loop ()
(as:tcp-connect "" 80
(lambda (sock data)
(declare (ignore sock))
(format t "got data: ~a~%" data))
(lambda (ev)
(format t "(ev): ~a~%" ev))
:read-timeout 5
:data (format nil "GET /~c~c" #\return #\newline))))
;; EDIT: thanks Matt
(compile 'delay)
(compile 'request)

GDB trace. Very helpful.

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 7768.0xc58]
0x00000143 in ?? ()
(gdb) bt
#0  0x00000143 in ?? ()
#1  0x003d0000 in ?? ()
#2  0x00000001 in ?? ()
#3  0x0000000d in ?? ()
#4  0x0000000d in ?? ()
#5  0x04a3b3d4 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.