浏览代码

supervisor/http.py: Allow request and file gc

Make tail_f_producer have weakref to request.
Add tail_f_producer.__del__ that closes file.
Marc Abramowitz 11 年之前
父节点
当前提交
cbc940e7ed
共有 1 个文件被更改,包括 6 次插入1 次删除
  1. 6 1
      supervisor/http.py

+ 6 - 1
supervisor/http.py

@@ -5,6 +5,7 @@ import sys
 import supervisor.medusa.text_socket as socket
 import errno
 import pwd
+import weakref
 
 from supervisor.compat import urllib
 from supervisor.compat import sha1
@@ -644,7 +645,7 @@ class supervisor_af_unix_http_server(supervisor_http_server):
 class tail_f_producer:
     def __init__(self, request, filename, head):
         self.file = open(filename, 'rb')
-        self.request = request
+        self.request = weakref.ref(request)
         self.delay = 0.1
         sz = self.fsize()
         if sz >= head:
@@ -652,6 +653,10 @@ class tail_f_producer:
         else:
             self.sz = 0
 
+    def __del__(self):
+        if self.file:
+            self.file.close()
+
     def more(self):
         try:
             newsz = self.fsize()