Skip to content

Commit b4490a7

Browse files
authored
Adjust logging lock handling for Python 3.13 (#15)
python/cpython#109462 removed `logging._acquireLock`. Fortunately, python/cpython#3385 simplified lock creation so that `with logging._lock:` is sufficient; that PR made it into Python 3.7, which is already pastescript's minimum Python requirement.
1 parent 3d6ae15 commit b4490a7

File tree

2 files changed

+14
-33
lines changed

2 files changed

+14
-33
lines changed

paste/script/util/logging_config.py

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -91,16 +91,13 @@ def fileConfig(fname, defaults=None):
9191
formatters = _create_formatters(cp)
9292

9393
# critical section
94-
logging._acquireLock()
95-
try:
94+
with logging._lock:
9695
logging._handlers.clear()
9796
if hasattr(logging, '_handlerList'):
9897
del logging._handlerList[:]
9998
# Handlers add themselves to logging._handlers
10099
handlers = _install_handlers(cp, formatters)
101100
_install_loggers(cp, handlers)
102-
finally:
103-
logging._releaseLock()
104101

105102

106103
def _resolve(name):
@@ -327,9 +324,8 @@ class ConfigSocketReceiver(ThreadingTCPServer):
327324
def __init__(self, host='localhost', port=DEFAULT_LOGGING_CONFIG_PORT,
328325
handler=None):
329326
ThreadingTCPServer.__init__(self, (host, port), handler)
330-
logging._acquireLock()
331-
self.abort = 0
332-
logging._releaseLock()
327+
with logging._lock:
328+
self.abort = 0
333329
self.timeout = 1
334330

335331
def serve_until_stopped(self):
@@ -341,16 +337,14 @@ def serve_until_stopped(self):
341337
self.timeout)
342338
if rd:
343339
self.handle_request()
344-
logging._acquireLock()
345-
abort = self.abort
346-
logging._releaseLock()
340+
with logging._lock:
341+
abort = self.abort
347342

348343
def serve(rcvr, hdlr, port):
349344
server = rcvr(port=port, handler=hdlr)
350345
global _listener
351-
logging._acquireLock()
352-
_listener = server
353-
logging._releaseLock()
346+
with logging._lock:
347+
_listener = server
354348
server.serve_until_stopped()
355349

356350
return threading.Thread(target=serve,
@@ -363,7 +357,6 @@ def stopListening():
363357
"""
364358
global _listener
365359
if _listener:
366-
logging._acquireLock()
367-
_listener.abort = 1
368-
_listener = None
369-
logging._releaseLock()
360+
with logging._lock:
361+
_listener.abort = 1
362+
_listener = None

tests/test_logging_config.py

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,11 @@ def test4():
120120
conf = globals()['config%d' % i]
121121
sys.stdout.write('config%d: ' % i)
122122
loggerDict = logging.getLogger().manager.loggerDict
123-
logging._acquireLock()
124-
try:
123+
with logging._lock:
125124
saved_handlers = logging._handlers.copy()
126125
if hasattr(logging, '_handlerList'):
127126
saved_handler_list = logging._handlerList[:]
128127
saved_loggers = loggerDict.copy()
129-
finally:
130-
logging._releaseLock()
131128
try:
132129
fn = tempfile.mktemp(".ini")
133130
f = open(fn, "w")
@@ -146,17 +143,14 @@ def test4():
146143
message('ok.')
147144
os.remove(fn)
148145
finally:
149-
logging._acquireLock()
150-
try:
146+
with logging._lock:
151147
logging._handlers.clear()
152148
logging._handlers.update(saved_handlers)
153149
if hasattr(logging, '_handlerList'):
154150
logging._handlerList[:] = saved_handler_list
155151
loggerDict = logging.getLogger().manager.loggerDict
156152
loggerDict.clear()
157153
loggerDict.update(saved_loggers)
158-
finally:
159-
logging._releaseLock()
160154

161155
#----------------------------------------------------------------------------
162156
# Test 5
@@ -196,14 +190,11 @@ def formatException(self, ei):
196190

197191
def test5():
198192
loggerDict = logging.getLogger().manager.loggerDict
199-
logging._acquireLock()
200-
try:
193+
with logging._lock:
201194
saved_handlers = logging._handlers.copy()
202195
if hasattr(logging, '_handlerList'):
203196
saved_handler_list = logging._handlerList[:]
204197
saved_loggers = loggerDict.copy()
205-
finally:
206-
logging._releaseLock()
207198
try:
208199
fn = tempfile.mktemp(".ini")
209200
f = open(fn, "w")
@@ -218,14 +209,11 @@ def test5():
218209
hdlr = logging.getLogger().handlers[0]
219210
logging.getLogger().handlers.remove(hdlr)
220211
finally:
221-
logging._acquireLock()
222-
try:
212+
with logging._lock:
223213
logging._handlers.clear()
224214
logging._handlers.update(saved_handlers)
225215
if hasattr(logging, '_handlerList'):
226216
logging._handlerList[:] = saved_handler_list
227217
loggerDict = logging.getLogger().manager.loggerDict
228218
loggerDict.clear()
229219
loggerDict.update(saved_loggers)
230-
finally:
231-
logging._releaseLock()

0 commit comments

Comments
 (0)