From 376e636f186e22ad479f35da4b973114d11ff2d9 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 25 Apr 2003 14:22:00 +0000 Subject: [PATCH] New version from Vinaj, should solve the threading problems (hopefully). --- Lib/test/output/test_logging | 4 ++-- Lib/test/test_logging.py | 21 ++++++++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Lib/test/output/test_logging b/Lib/test/output/test_logging index 0b0c4a0cdf6..e7c3eef176d 100644 --- a/Lib/test/output/test_logging +++ b/Lib/test/output/test_logging @@ -25,7 +25,7 @@ WARNING:UNDEF:Message 21 INFO:UNDEF:Message 22 CRITICAL:INF.BADPARENT.UNDEF:Message 23 CRITICAL:INF.BADPARENT:Message 24 -INFO:INF:Messages should bear numbers 0 through 24. +INFO:INF:Finish up, it's closing time. Messages should bear numbers 0 through 24. -- log_test0 end --------------------------------------------------- -- log_test1 begin --------------------------------------------------- -- setting logging level to 'Boring' ----- @@ -511,5 +511,5 @@ UNDEF -> WARNING: Message 21 (via logrecv.tcp.UNDEF) UNDEF -> INFO: Message 22 (via logrecv.tcp.UNDEF) INF.BADPARENT.UNDEF -> CRITICAL: Message 23 (via logrecv.tcp.INF.BADPARENT.UNDEF) INF.BADPARENT -> CRITICAL: Message 24 (via logrecv.tcp.INF.BADPARENT) -INF -> INFO: Messages should bear numbers 0 through 24. (via logrecv.tcp.INF) +INF -> INFO: Finish up, it's closing time. Messages should bear numbers 0 through 24. (via logrecv.tcp.INF) -- logrecv output end --------------------------------------------------- diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 9c47408b23a..d43b33e8a9f 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -38,6 +38,8 @@ except (ValueError, locale.Error): BANNER = "-- %-10s %-6s ---------------------------------------------------\n" +FINISH_UP = "Finish up, it's closing time. Messages should bear numbers 0 through 24." + #---------------------------------------------------------------------------- # Log receiver #---------------------------------------------------------------------------- @@ -79,10 +81,15 @@ class LogRecordStreamHandler(StreamRequestHandler): def handleLogRecord(self, record): logname = "logrecv.tcp." + record.name + #If the end-of-messages sentinel is seen, tell the server to terminate + if record.msg == FINISH_UP: + self.server.abort = 1 record.msg = record.msg + " (via " + logname + ")" logger = logging.getLogger(logname) logger.handle(record) +socketDataProcessed = threading.Condition() + class LogRecordSocketReceiver(ThreadingTCPServer): """ A simple-minded TCP socket-based logging receiver suitable for test @@ -107,6 +114,10 @@ class LogRecordSocketReceiver(ThreadingTCPServer): if rd: self.handle_request() abort = self.abort + #notify the main thread that we're about to exit + socketDataProcessed.acquire() + socketDataProcessed.notify() + socketDataProcessed.release() def process_request(self, request, client_address): #import threading @@ -195,7 +206,7 @@ def test0(): INF_ERR_UNDEF.info(nextmessage()) INF_ERR_UNDEF.debug(nextmessage()) - INF.info("Messages should bear numbers 0 through 24.") + INF.info(FINISH_UP) #---------------------------------------------------------------------------- # Test 1 @@ -455,10 +466,10 @@ def test_main(): banner("log_test3", "end") finally: - #shut down server - tcpserver.abort = 1 - for thread in threads: - thread.join() + #wait for TCP receiver to terminate + socketDataProcessed.acquire() + socketDataProcessed.wait() + socketDataProcessed.release() banner("logrecv output", "begin") sys.stdout.write(sockOut.getvalue()) sockOut.close()