[usocket-cvs] r381 - usocket/branches/new-wfi/backend
ehuelsmann at common-lisp.net
ehuelsmann at common-lisp.net
Wed Jul 23 21:13:51 UTC 2008
Author: ehuelsmann
Date: Wed Jul 23 17:13:51 2008
New Revision: 381
Modified:
usocket/branches/new-wfi/backend/armedbear.lisp
Log:
Increased ABCL W-F-I efficiency.
Modified: usocket/branches/new-wfi/backend/armedbear.lisp
==============================================================================
--- usocket/branches/new-wfi/backend/armedbear.lisp (original)
+++ usocket/branches/new-wfi/backend/armedbear.lisp Wed Jul 23 17:13:51 2008
@@ -88,6 +88,7 @@
(t
(java:jclass-name (jop-class instance)))))
+(declaim (inline jop-deref))
(defun jop-deref (instance)
(if (java-object-proxy-p instance)
(jop-value instance)
@@ -355,14 +356,13 @@
(channels (mapcar #'socket sockets)))
(unwind-protect
(with-mapped-conditions ()
- (let ((jfalse (java:make-immediate-object nil :boolean))
- (sel (jdi:jop-deref selector)))
+ (let ((sel (jdi:jop-deref selector)))
(dolist (channel channels)
(let ((chan (jdi:jop-deref channel)))
(java:jcall (java:jmethod "java.nio.channels.SelectableChannel"
"configureBlocking"
"boolean")
- chan jfalse)
+ chan (java:make-immediate-object nil :boolean))
(java:jcall (java:jmethod "java.nio.channels.SelectableChannel"
"register"
"java.nio.channels.Selector" "int")
@@ -387,25 +387,16 @@
(jdi:do-jmethod key "channel"))))
(setf (state (gethash chan %wait))
:READ))))))))
- ;; cancel all Selector registrations
- (let* ((keys (jdi:do-jmethod selector "keys"))
- (iter (jdi:do-jmethod keys "iterator")))
- (loop while (java:jcall (java:jmethod "java.util.Iterator" "hasNext")
- (jdi:jop-deref iter))
- do (java:jcall
- (java:jmethod "java.nio.channels.SelectionKey" "cancel")
- (java:jcall (java:jmethod "java.util.Iterator" "next")
- (jdi:jop-deref iter)))))
- ;; close the selector
+ ;; close the selector: all keys will be deregistered
(java:jcall (java:jmethod "java.nio.channels.Selector" "close")
(jdi:jop-deref selector))
;; make all sockets blocking again.
- (let ((jtrue (java:make-immediate-object t :boolean)))
- (dolist (chan channels)
- (java:jcall (java:jmethod "java.nio.channels.SelectableChannel"
- "configureBlocking"
- "boolean")
- (jdi:jop-deref chan) jtrue))))))
+ (dolist (channel channels)
+ (java:jcall (java:jmethod "java.nio.channels.SelectableChannel"
+ "configureBlocking"
+ "boolean")
+ (jdi:jop-deref channel)
+ (java:make-immediate-object t :boolean))))))
;;
More information about the usocket-cvs
mailing list