summaryrefslogtreecommitdiffstats
path: root/Lib/logging
diff options
context:
space:
mode:
authorVinay Sajip <vinay_sajip@yahoo.co.uk>2010-09-27 21:46:14 (GMT)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>2010-09-27 21:46:14 (GMT)
commit3ab905f17bebb69bba4df2a4baa0af3e973eb2b2 (patch)
tree2537eaeb5b3e9be248ebdf89e661cf5a82cfb7c0 /Lib/logging
parentaf08f9352370067a879fa97790a692d84cf40183 (diff)
downloadcpython-3ab905f17bebb69bba4df2a4baa0af3e973eb2b2.zip
cpython-3ab905f17bebb69bba4df2a4baa0af3e973eb2b2.tar.gz
cpython-3ab905f17bebb69bba4df2a4baa0af3e973eb2b2.tar.bz2
Issue #9945: logging: backported locking fixes from py3k.
Diffstat (limited to 'Lib/logging')
-rw-r--r--Lib/logging/__init__.py76
1 files changed, 39 insertions, 37 deletions
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index 8065141..b555bbe 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -1180,20 +1180,23 @@ class Logger(Filterer):
"""
Add the specified handler to this logger.
"""
- if not (hdlr in self.handlers):
- self.handlers.append(hdlr)
+ _acquireLock()
+ try:
+ if not (hdlr in self.handlers):
+ self.handlers.append(hdlr)
+ finally:
+ _releaseLock()
def removeHandler(self, hdlr):
"""
Remove the specified handler from this logger.
"""
- if hdlr in self.handlers:
- #hdlr.close()
- hdlr.acquire()
- try:
+ _acquireLock()
+ try:
+ if hdlr in self.handlers:
self.handlers.remove(hdlr)
- finally:
- hdlr.release()
+ finally:
+ _releaseLock()
def callHandlers(self, record):
"""
@@ -1389,26 +1392,28 @@ def basicConfig(**kwargs):
using sys.stdout or sys.stderr), whereas FileHandler closes its stream
when the handler is closed.
"""
- if len(root.handlers) == 0:
- filename = kwargs.get("filename")
- if filename:
- mode = kwargs.get("filemode", 'a')
- hdlr = FileHandler(filename, mode)
- else:
- stream = kwargs.get("stream")
- hdlr = StreamHandler(stream)
- fs = kwargs.get("format", BASIC_FORMAT)
- dfs = kwargs.get("datefmt", None)
- fmt = Formatter(fs, dfs)
- hdlr.setFormatter(fmt)
- root.addHandler(hdlr)
- level = kwargs.get("level")
- if level is not None:
- if str(level) == level: # If a string was passed, do more checks
- if level not in _levelNames:
- raise ValueError("Unknown level: %r" % level)
- level = _levelNames[level]
- root.setLevel(level)
+ # Add thread safety in case someone mistakenly calls
+ # basicConfig() from multiple threads
+ _acquireLock()
+ try:
+ if len(root.handlers) == 0:
+ filename = kwargs.get("filename")
+ if filename:
+ mode = kwargs.get("filemode", 'a')
+ hdlr = FileHandler(filename, mode)
+ else:
+ stream = kwargs.get("stream")
+ hdlr = StreamHandler(stream)
+ fs = kwargs.get("format", BASIC_FORMAT)
+ dfs = kwargs.get("datefmt", None)
+ fmt = Formatter(fs, dfs)
+ hdlr.setFormatter(fmt)
+ root.addHandler(hdlr)
+ level = kwargs.get("level")
+ if level is not None:
+ root.setLevel(level)
+ finally:
+ _releaseLock()
#---------------------------------------------------------------------------
# Utility functions at module level.
@@ -1426,15 +1431,6 @@ def getLogger(name=None):
else:
return root
-#def getRootLogger():
-# """
-# Return the root logger.
-#
-# Note that getLogger('') now does the same thing, so this function is
-# deprecated and may disappear in the future.
-# """
-# return root
-
def critical(msg, *args, **kwargs):
"""
Log a message with severity 'CRITICAL' on the root logger.
@@ -1543,9 +1539,15 @@ class NullHandler(Handler):
a NullHandler and add it to the top-level logger of the library module or
package.
"""
+ def handle(self, record):
+ pass
+
def emit(self, record):
pass
+ def createLock(self):
+ self.lock = None
+
# Warnings integration
_warnings_showwarning = None