[yum-commits] Branch 'yum-3_2_X' - yum/__init__.py yum/logginglevels.py

James Antill james at osuosl.org
Tue Jun 21 18:54:26 UTC 2011


 yum/__init__.py      |    5 ++++-
 yum/logginglevels.py |    4 +++-
 2 files changed, 7 insertions(+), 2 deletions(-)

New commits:
commit 5a13788a8660848d62e394c9294bccfa3f491ab5
Author: Zdeněk Pavlas <zpavlas at redhat.com>
Date:   Tue Jun 21 15:43:18 2011 +0200

    Fix a leaked file descriptor
    
    'yum.log' is now closed when YumBase instance is GC'd.
    Resolves BZ 713924.

diff --git a/yum/__init__.py b/yum/__init__.py
index 28b875c..eb52696 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -203,11 +203,14 @@ class YumBase(depsolve.Depsolve):
         self.prerepoconf = _YumPreRepoConf()
 
         self.run_with_package_names = set()
+        self._cleanup = []
 
     def __del__(self):
         self.close()
         self.closeRpmDB()
         self.doUnlock()
+        # call cleanup callbacks
+        for cb in self._cleanup: cb()
 
     def close(self):
         # We don't want to create the object, so we test if it's been created
@@ -375,7 +378,7 @@ class YumBase(depsolve.Depsolve):
                                      syslog_device)
 
     def doFileLogSetup(self, uid, logfile):
-        logginglevels.setFileLog(uid, logfile)
+        logginglevels.setFileLog(uid, logfile, self._cleanup)
 
     def getReposFromConfigFile(self, repofn, repo_age=None, validate=None):
         """read in repositories from a config .repo file"""
diff --git a/yum/logginglevels.py b/yum/logginglevels.py
index 8fae5ab..14c5e73 100644
--- a/yum/logginglevels.py
+++ b/yum/logginglevels.py
@@ -186,7 +186,7 @@ def doLoggingSetup(debuglevel, errorlevel,
     if errorlevel is not None:  
         setErrorLevel(errorlevel)
 
-def setFileLog(uid, logfile):
+def setFileLog(uid, logfile, cleanup=None):
     # TODO: When python's logging config parser doesn't blow up
     # when the user is non-root, put this in the config file.
     # syslog-style log
@@ -208,6 +208,8 @@ def setFileLog(uid, logfile):
                 "%b %d %H:%M:%S")
             filehandler.setFormatter(formatter)
             filelogger.addHandler(filehandler)
+            if not cleanup is None:
+                cleanup.append(lambda: filelogger.removeHandler(filehandler))
         except IOError:
             logging.getLogger("yum").critical('Cannot open logfile %s', logfile)
 


More information about the Yum-commits mailing list