'yum.log' is now closed when YumBase instance is GC'd.
Resolves BZ 713924.
---
yum/__init__.py | 5 ++++-
yum/logginglevels.py | 4 +++-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/yum/__init__.py b/yum/__init__.py
index 8fa957f..c21154e 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)
--
1.7.4.4
_______________________________________________
Yum-devel mailing list
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum-devel