add a REMOVE-FD-HANDLER restart around calling the FD handler function
authorNikodemus Siivola <nikodemus@sb-studio.net>
Sun, 24 Apr 2011 13:01:33 +0000 (16:01 +0300)
committerNikodemus Siivola <nikodemus@sb-studio.net>
Mon, 6 Jun 2011 11:20:18 +0000 (14:20 +0300)
  Otherwise broken FD handlers are even more of a pain than they need
  to be.

  Makes bug lp#769162 less irritating, but doesn't actually fix it.

src/code/serve-event.lisp

index e3563e6..2b72d84 100644 (file)
@@ -322,7 +322,11 @@ happens. Server returns T if something happened and NIL otherwise. Timeout
                              (ecase (handler-direction handler)
                                (:input (sb!unix:fd-isset fd read-fds))
                                (:output (sb!unix:fd-isset fd write-fds)))))))
-                 (funcall (handler-function handler)
-                          (handler-descriptor handler)))
+                 (with-simple-restart (remove-fd-handler "Remove ~S" handler)
+                   (funcall (handler-function handler)
+                            (handler-descriptor handler))
+                   (go :next))
+                 (remove-fd-handler handler)
+                 :next)
                t))))))