sb-bsd-socket tests: don't listen on a predefined port.
authorStas Boukarev <stassats@gmail.com>
Tue, 4 Jun 2013 20:58:55 +0000 (00:58 +0400)
committerStas Boukarev <stassats@gmail.com>
Tue, 4 Jun 2013 20:59:33 +0000 (00:59 +0400)
Listening on 1974 prevents from building contribs in parallel.

NEWS
contrib/sb-bsd-sockets/tests.lisp

diff --git a/NEWS b/NEWS
index 391d0b3..a46a208 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,8 @@ changes relative to sbcl-1.1.8:
     addrinfo. (lp#1187041, patch by Jerry James)
   * bug fix: uninitialized type-error conditions can now be printed.
     (lp#1184586)
+  * bug fix: tests for sb-bsd-sockets no longer use a predefined port for
+    listening, allowing several tests to run in parallel.
   
 changes in sbcl-1.1.8 relative to sbcl-1.1.7:
   * notice: The implementation of MAP-ALLOCATED-OBJECTS (the heart of
index 776878c..1ed052f 100644 (file)
   #-(or sbcl gencgc) (sb-ext:gc))
 
 (deftest inet-socket-bind
-  (let ((s (make-instance 'inet-socket :type :stream :protocol (get-protocol-by-name "tcp"))))
-    ;; Given the functions we've got so far, if you can think of a
-    ;; better way to make sure the bind succeeded than trying it
-    ;; twice, let me know
-    ;; 1974 has no special significance, unless you're the same age as me
-    (do-gc-portably) ;gc should clear out any old sockets bound to this port
-    (socket-bind s (make-inet-address "127.0.0.1") 1974)
-    (handler-case
-        (let ((s2 (make-instance 'inet-socket :type :stream :protocol (get-protocol-by-name "tcp"))))
-          (socket-bind s2 (make-inet-address "127.0.0.1") 1974)
-          nil)
-      (address-in-use-error () t)))
+  (let* ((tcp (get-protocol-by-name "tcp"))
+         (address (make-inet-address "127.0.0.1"))
+         (s (make-instance 'inet-socket :type :stream :protocol tcp)))
+    (do-gc-portably) ; gc should clear out any old sockets bound to this port
+    (unwind-protect
+         ;; Given the functions we've got so far, if you can think of a
+         ;; better way to make sure the bind succeeded than trying it
+         ;; twice, let me know
+         (progn
+           (socket-bind s address 0)
+           (handler-case
+               (let ((port (nth-value 1 (socket-name s)))
+                     (s2 (make-instance 'inet-socket
+                                        :type :stream :protocol tcp)))
+                 (unwind-protect
+                      (socket-bind s2 address port)
+                   (socket-close s2))
+                 nil)
+             (address-in-use-error () t)))
+      (socket-close s)))
   t)
 
 (deftest* (simple-sockopt-test)