[nio-cvs] r76 - in branches/home/psmith/restructure: . src/event src/io src/nio-logger

psmith at common-lisp.net psmith at common-lisp.net
Wed Feb 7 01:48:25 UTC 2007


Author: psmith
Date: Tue Feb  6 20:48:24 2007
New Revision: 76

Modified:
   branches/home/psmith/restructure/run-http.lisp
   branches/home/psmith/restructure/src/event/epoll.lisp
   branches/home/psmith/restructure/src/io/nio-server.lisp
   branches/home/psmith/restructure/src/nio-logger/nio-logger.lisp
Log:
Thread safe connect; tidy up

Modified: branches/home/psmith/restructure/run-http.lisp
==============================================================================
--- branches/home/psmith/restructure/run-http.lisp	(original)
+++ branches/home/psmith/restructure/run-http.lisp	Tue Feb  6 20:48:24 2007
@@ -1,4 +1,4 @@
 (push :nio-debug *features*)
 (require :asdf)
 (require :nio-http)
-(nio:start-server 'identity 'identity 'nio-http:http-state-machine :host "127.0.0.1")
+(nio:start-server 'nio-http:http-state-machine :host "127.0.0.1")

Modified: branches/home/psmith/restructure/src/event/epoll.lisp
==============================================================================
--- branches/home/psmith/restructure/src/event/epoll.lisp	(original)
+++ branches/home/psmith/restructure/src/event/epoll.lisp	Tue Feb  6 20:48:24 2007
@@ -73,14 +73,14 @@
   (define-condition poll-error (error) ())
 
   (defun poll-events (event-queue)
-#+nio-debug    (format t "poll-events called with :event-queue ~A~%" event-queue)
+#+nio-debug2    (format t "poll-events called with :event-queue ~A~%" event-queue)
     (with-foreign-object (events 'epoll-event +epoll-size+)
       (memzero events (* +epoll-event-size+ +epoll-size+))
       (loop for res = (%epoll-wait event-queue events +epoll-size+ 100)
 	   
 	   do
 	   (progn
-#+nio-debug	     (format t "poll-events - dealing with ~A~%" res)
+#+nio-debug2	     (format t "poll-events - dealing with ~A~%" res)
 	     (case res
 	       (-1 
 		(let ((errno (get-errno)))

Modified: branches/home/psmith/restructure/src/io/nio-server.lisp
==============================================================================
--- branches/home/psmith/restructure/src/io/nio-server.lisp	(original)
+++ branches/home/psmith/restructure/src/io/nio-server.lisp	Tue Feb  6 20:48:24 2007
@@ -34,7 +34,7 @@
   t)
 
 ;TODO thread safety
-(defparameter +connected-sockets+ nil
+(defparameter +connected-sockets-queue+ (nio-compat:concurrent-queue)
   "List of sockets that have been connected and are awaiting addition to the event-notification system")
 
 ;loop over hashtable 
@@ -59,13 +59,13 @@
 		 (push async-fd removals)))
 	   client-hash)
     (dolist (async-fd removals)
-      (remhash (async-fd-read-fd async-fd) client-hash))
-    (format t "client-hash list ~A~%"client-hash )))
+      (remhash (async-fd-read-fd async-fd) client-hash))))
+;    (format t "client-hash list ~A~%"client-hash )
 
 
   			     
 
-(defun start-server (connection-handler accept-filter connection-type 
+(defun start-server (connection-type 
 		     &key 
 		     (protocol :inet) 
 		     (port (+ (random 60000) 1024)) 
@@ -153,14 +153,12 @@
 			     (when (write-event-p event) (setf (write-ready async-fd) t)))))))))
 
 					;add outgoing sockets to event queue
-	     (format-log t "nio-server:start-server - Processing client add ~A~%" +connected-sockets+)
-	     (loop for new-fd in +connected-sockets+ do
+#+nio-debug2     (format-log t "nio-server:start-server - Processing client add ~A~%" +connected-sockets-queue+)
+
+             (loop for new-fd = (nio-compat:take +connected-sockets-queue+ :blocking-call nil) until (null new-fd) do
 		  (format-log t "nio-server:start-server - Dealing with ~A~%" new-fd)
 		  (setf (gethash (async-fd-read-fd new-fd) client-hash) new-fd)
 		  (add-async-fd event-queue new-fd :read-write))
-
-					;TODO thread safety
-	     (setf +connected-sockets+ nil)
 	     
 					;loop over async-fd's processing where necessary
 	     (process-async-fds client-hash)
@@ -181,8 +179,8 @@
     
     (if (connect-inet-socket sock host port)
     	(let ((sm (create-state-machine connection-type sock sock sock)))
-  	  (push sm +connected-sockets+) 
-  	  (format-log t "nio-server:add-connection - Socket enqueued: ~A~%" +connected-sockets+)
+	  (nio-compat:add +connected-sockets-queue+ sm)
+  	  (format-log t "nio-server:add-connection - Socket enqueued: ~A~%" +connected-sockets-queue+)
 	  (return-from add-connection sm))
   	(format t "Connect failed!!~A ~%" (get-errno)))))
    
\ No newline at end of file

Modified: branches/home/psmith/restructure/src/nio-logger/nio-logger.lisp
==============================================================================
--- branches/home/psmith/restructure/src/nio-logger/nio-logger.lisp	(original)
+++ branches/home/psmith/restructure/src/nio-logger/nio-logger.lisp	Tue Feb  6 20:48:24 2007
@@ -45,8 +45,7 @@
 ;;e.g. (tail-log "/var/log/httpd/access_log" "192.168.1.1")
 (defun tail-log(filename ip-address)
   ;;shouldn't be listenting on the client hence nil for accept SM to start-server
-  (sb-thread:make-thread #'(lambda()(nio:start-server 'identity 'identity nil :host "127.0.0.1" :port 9897)) :name "nio-server")
-  (sleep 4)
+  (sb-thread:make-thread #'(lambda()(nio:start-server nil)) :name "nio-server")
   (let ((sm (nio:add-connection ip-address 16323 'nio-yarpc:yarpc-client-state-machine)))
     (nio-utils:format-log t "toplevel adding conn ~A to ~A~%" sm ip-address)
     (with-line-from-tailed-file (text filename 1)
@@ -62,7 +61,7 @@
   (setf nio-yarpc:+process-jobs-inline+ nil)
   (setf  +log-file-name+ out-file)
   (nio:load-ips allowed-ips)
-  (sb-thread:make-thread #'(lambda()(nio:start-server 'identity 'identity 'nio-yarpc:yarpc-state-machine :host listen-ip :accept-connection 'nio:check-ip)) :name "nio-server")
+  (sb-thread:make-thread #'(lambda()(nio:start-server 'nio-yarpc:yarpc-state-machine :host listen-ip :accept-connection 'nio:check-ip)) :name "nio-server")
   (loop
     ;;block waiting for jobs
      (nio-yarpc:run-job)))



More information about the Nio-cvs mailing list