Skip to content

Commit

Permalink
Added hotpatch for sbcl bug #1005161 until it is fixed in sbcl.
Browse files Browse the repository at this point in the history
  • Loading branch information
moesenle committed Dec 18, 2012
1 parent 8e682c1 commit 759f3e4
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 1 deletion.
3 changes: 2 additions & 1 deletion cram_roslisp_common/cram-roslisp-common.asd
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@
(:file "ros-node" :depends-on ("package"))
(:file "time" :depends-on ("package" "ros-node"))
(:file "lispification" :depends-on ("package"))
(:file "tf" :depends-on ("package" "ros-node"))))))
(:file "tf" :depends-on ("package" "ros-node"))
(:file "sbcl-hotpatches")))))
56 changes: 56 additions & 0 deletions cram_roslisp_common/src/sbcl-hotpatches.lisp
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
;;; Copyright (c) 2012, Lorenz Moesenlechner <moesenle@in.tum.de>
;;; All rights reserved.
;;;
;;; Redistribution and use in source and binary forms, with or without
;;; modification, are permitted provided that the following conditions are met:
;;;
;;; * Redistributions of source code must retain the above copyright
;;; notice, this list of conditions and the following disclaimer.
;;; * Redistributions in binary form must reproduce the above copyright
;;; notice, this list of conditions and the following disclaimer in the
;;; documentation and/or other materials provided with the distribution.
;;; * Neither the name of the Intelligent Autonomous Systems Group/
;;; Technische Universitaet Muenchen nor the names of its contributors
;;; may be used to endorse or promote products derived from this software
;;; without specific prior written permission.
;;;
;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
;;; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
;;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
;;; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
;;; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
;;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
;;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
;;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
;;; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
;;; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
;;; POSSIBILITY OF SUCH DAMAGE.

(in-package :cl-user)

(locally (declare (sb-ext:muffle-conditions sb-kernel:redefinition-warning))

;; We redefine release-fd-stream-resources since the failure
;; handling was catching deadlines. Basically, this means that it
;; interferes with cram's scheduling which can lead to dropped
;; sockets or similar things.
(handler-bind ((sb-kernel:redefinition-warning #'muffle-warning))
(sb-ext:with-unlocked-packages (sb-impl)
(defun sb-impl::release-fd-stream-resources (fd-stream)
(sb-sys:without-interrupts
;; Drop handlers first.
(when (sb-impl::fd-stream-handler fd-stream)
(sb-sys:remove-fd-handler (sb-impl::fd-stream-handler fd-stream))
(setf (sb-impl::fd-stream-handler fd-stream) nil))
;; Disable interrupts so that a asynch unwind will not leave
;; us with a dangling finalizer (that would close the same
;; --possibly reassigned-- FD again), or a stream with a closed
;; FD that appears open.
(sb-unix:unix-close (sb-sys:fd-stream-fd fd-stream))
(sb-impl::set-closed-flame fd-stream)
(when (fboundp 'sb-ext:cancel-finalization)
(sb-ext:cancel-finalization fd-stream)))
;; Release all buffers. If this is undone, or interrupted,
;; we're still safe: buffers have finalizers of their own.
(sb-impl::release-fd-stream-buffers fd-stream)))))

0 comments on commit 759f3e4

Please sign in to comment.