[nio-cvs] r2 -

psmith at common-lisp.net psmith at common-lisp.net
Sat Sep 30 20:08:52 UTC 2006


Author: psmith
Date: Sat Sep 30 16:08:51 2006
New Revision: 2

Modified:
   async-fd.lisp
Log:
Applied mem leak patch


Modified: async-fd.lisp
==============================================================================
--- async-fd.lisp	(original)
+++ async-fd.lisp	Sat Sep 30 16:08:51 2006
@@ -181,12 +181,13 @@
 
 (defun close-async-fd (async-fd)
   "Close ASYNC-FD's fd after everything has been written from write-queue."
-  (with-slots (write-queue read-fd write-fd) async-fd
+  (with-slots (write-queue read-fd write-fd foreign-read-buffer) async-fd
     (cond
 
       ;; if write-queue is emtpy, close now
       ((null write-queue)
        (close-fd read-fd)
+       (foreign-free foreign-read-buffer)
        (unless (= read-fd write-fd) (close-fd write-fd)))
 
       ;; data in write-queue, mark as closing
@@ -213,11 +214,16 @@
               (unless (= written size)
                 (return)))))
 
-    ;; remove entries that have been fully written 
-    (setf write-queue (remove-if #'(lambda (x) 
-				     (with-slots (size written) x
-				       (= size written)))
-				 write-queue))
+     ;; remove (and dealloc buffers) of entries that have been fully written
+     (let ((unfinished-entries NIL))
+       (setf write-queue
+           (nreverse
+            (dolist (entry write-queue unfinished-entries)
+              (with-slots (size written) entry
+                (if (= size written)
+                    (with-slots (buffer) entry
+                      (foreign-free buffer))
+                    (push entry unfinished-entries)))))))
 
     ;; if queue empty and close pending, close fd
     (if (and (null write-queue) (slot-value async-fd 'close-pending))



More information about the Nio-cvs mailing list