Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3ab905f

Browse files
committed
Issue #9945: logging: backported locking fixes from py3k.
1 parent af08f93 commit 3ab905f

1 file changed

Lines changed: 39 additions & 37 deletions

File tree

Lib/logging/__init__.py

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,20 +1180,23 @@ def addHandler(self, hdlr):
11801180
"""
11811181
Add the specified handler to this logger.
11821182
"""
1183-
if not (hdlr in self.handlers):
1184-
self.handlers.append(hdlr)
1183+
_acquireLock()
1184+
try:
1185+
if not (hdlr in self.handlers):
1186+
self.handlers.append(hdlr)
1187+
finally:
1188+
_releaseLock()
11851189

11861190
def removeHandler(self, hdlr):
11871191
"""
11881192
Remove the specified handler from this logger.
11891193
"""
1190-
if hdlr in self.handlers:
1191-
#hdlr.close()
1192-
hdlr.acquire()
1193-
try:
1194+
_acquireLock()
1195+
try:
1196+
if hdlr in self.handlers:
11941197
self.handlers.remove(hdlr)
1195-
finally:
1196-
hdlr.release()
1198+
finally:
1199+
_releaseLock()
11971200

11981201
def callHandlers(self, record):
11991202
"""
@@ -1389,26 +1392,28 @@ def basicConfig(**kwargs):
13891392
using sys.stdout or sys.stderr), whereas FileHandler closes its stream
13901393
when the handler is closed.
13911394
"""
1392-
if len(root.handlers) == 0:
1393-
filename = kwargs.get("filename")
1394-
if filename:
1395-
mode = kwargs.get("filemode", 'a')
1396-
hdlr = FileHandler(filename, mode)
1397-
else:
1398-
stream = kwargs.get("stream")
1399-
hdlr = StreamHandler(stream)
1400-
fs = kwargs.get("format", BASIC_FORMAT)
1401-
dfs = kwargs.get("datefmt", None)
1402-
fmt = Formatter(fs, dfs)
1403-
hdlr.setFormatter(fmt)
1404-
root.addHandler(hdlr)
1405-
level = kwargs.get("level")
1406-
if level is not None:
1407-
if str(level) == level: # If a string was passed, do more checks
1408-
if level not in _levelNames:
1409-
raise ValueError("Unknown level: %r" % level)
1410-
level = _levelNames[level]
1411-
root.setLevel(level)
1395+
# Add thread safety in case someone mistakenly calls
1396+
# basicConfig() from multiple threads
1397+
_acquireLock()
1398+
try:
1399+
if len(root.handlers) == 0:
1400+
filename = kwargs.get("filename")
1401+
if filename:
1402+
mode = kwargs.get("filemode", 'a')
1403+
hdlr = FileHandler(filename, mode)
1404+
else:
1405+
stream = kwargs.get("stream")
1406+
hdlr = StreamHandler(stream)
1407+
fs = kwargs.get("format", BASIC_FORMAT)
1408+
dfs = kwargs.get("datefmt", None)
1409+
fmt = Formatter(fs, dfs)
1410+
hdlr.setFormatter(fmt)
1411+
root.addHandler(hdlr)
1412+
level = kwargs.get("level")
1413+
if level is not None:
1414+
root.setLevel(level)
1415+
finally:
1416+
_releaseLock()
14121417

14131418
#---------------------------------------------------------------------------
14141419
# Utility functions at module level.
@@ -1426,15 +1431,6 @@ def getLogger(name=None):
14261431
else:
14271432
return root
14281433

1429-
#def getRootLogger():
1430-
# """
1431-
# Return the root logger.
1432-
#
1433-
# Note that getLogger('') now does the same thing, so this function is
1434-
# deprecated and may disappear in the future.
1435-
# """
1436-
# return root
1437-
14381434
def critical(msg, *args, **kwargs):
14391435
"""
14401436
Log a message with severity 'CRITICAL' on the root logger.
@@ -1543,9 +1539,15 @@ class NullHandler(Handler):
15431539
a NullHandler and add it to the top-level logger of the library module or
15441540
package.
15451541
"""
1542+
def handle(self, record):
1543+
pass
1544+
15461545
def emit(self, record):
15471546
pass
15481547

1548+
def createLock(self):
1549+
self.lock = None
1550+
15491551
# Warnings integration
15501552

15511553
_warnings_showwarning = None

0 commit comments

Comments
 (0)