anchor.diff:  
   (defun init (&rest sdl-init-flags)
     "Initialize SDL2 with the specified subsystems. Initializes everything by default."
  -  (if *main-thread-channel*
  -      (error "SDL already initialized; did you mean INIT-SUBSYSTEM?")
  -      (setf *main-thread-channel* (make-channel)))
  +  (unless *main-thread-channel*
  +    (setf *main-thread-channel* (make-channel))
  +    #-(and ccl darwin)
  +    (bt:make-thread #'sdl-main-thread))
     (unless *lisp-message-event*
       (setf *lisp-message-event* (sdl-register-events 1))
       (setf (c-ref *wakeup-event* sdl2-ffi:sdl-event :type) *lisp-message-event*))
  
positive.code: (defvar *lisp-message-event* nil)
  (defvar *wakeup-event* (alloc 'sdl2-ffi:sdl-event))
  
  (defmacro in-main-thread ((&key background) &body b)
    (with-gensyms (fun channel)
      `(let ((,fun (lambda () ,@b)))
         (if *main-thread-channel*
  
negative.code:                     `(let ((,channel (make-channel)))
                         (sendmsg *main-thread-channel*
                                  (cons ,fun ,channel))
                         ,(unless no-event
                            '(push-event *wakeup-event*))
                         (let ((result (recvmsg ,channel)))
                           (etypecase result
                             (list (values-list result))
  