Commit 376e636f authored by Guido van Rossum's avatar Guido van Rossum

New version from Vinaj, should solve the threading problems (hopefully).

parent 7d9963fe
...@@ -25,7 +25,7 @@ WARNING:UNDEF:Message 21 ...@@ -25,7 +25,7 @@ WARNING:UNDEF:Message 21
INFO:UNDEF:Message 22 INFO:UNDEF:Message 22
CRITICAL:INF.BADPARENT.UNDEF:Message 23 CRITICAL:INF.BADPARENT.UNDEF:Message 23
CRITICAL:INF.BADPARENT:Message 24 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_test0 end ---------------------------------------------------
-- log_test1 begin --------------------------------------------------- -- log_test1 begin ---------------------------------------------------
-- setting logging level to 'Boring' ----- -- setting logging level to 'Boring' -----
...@@ -511,5 +511,5 @@ UNDEF -> WARNING: Message 21 (via logrecv.tcp.UNDEF) ...@@ -511,5 +511,5 @@ UNDEF -> WARNING: Message 21 (via logrecv.tcp.UNDEF)
UNDEF -> INFO: Message 22 (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.UNDEF -> CRITICAL: Message 23 (via logrecv.tcp.INF.BADPARENT.UNDEF)
INF.BADPARENT -> CRITICAL: Message 24 (via logrecv.tcp.INF.BADPARENT) 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 --------------------------------------------------- -- logrecv output end ---------------------------------------------------
...@@ -38,6 +38,8 @@ except (ValueError, locale.Error): ...@@ -38,6 +38,8 @@ except (ValueError, locale.Error):
BANNER = "-- %-10s %-6s ---------------------------------------------------\n" BANNER = "-- %-10s %-6s ---------------------------------------------------\n"
FINISH_UP = "Finish up, it's closing time. Messages should bear numbers 0 through 24."
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
# Log receiver # Log receiver
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
...@@ -79,10 +81,15 @@ class LogRecordStreamHandler(StreamRequestHandler): ...@@ -79,10 +81,15 @@ class LogRecordStreamHandler(StreamRequestHandler):
def handleLogRecord(self, record): def handleLogRecord(self, record):
logname = "logrecv.tcp." + record.name 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 + ")" record.msg = record.msg + " (via " + logname + ")"
logger = logging.getLogger(logname) logger = logging.getLogger(logname)
logger.handle(record) logger.handle(record)
socketDataProcessed = threading.Condition()
class LogRecordSocketReceiver(ThreadingTCPServer): class LogRecordSocketReceiver(ThreadingTCPServer):
""" """
A simple-minded TCP socket-based logging receiver suitable for test A simple-minded TCP socket-based logging receiver suitable for test
...@@ -107,6 +114,10 @@ class LogRecordSocketReceiver(ThreadingTCPServer): ...@@ -107,6 +114,10 @@ class LogRecordSocketReceiver(ThreadingTCPServer):
if rd: if rd:
self.handle_request() self.handle_request()
abort = self.abort 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): def process_request(self, request, client_address):
#import threading #import threading
...@@ -195,7 +206,7 @@ def test0(): ...@@ -195,7 +206,7 @@ def test0():
INF_ERR_UNDEF.info(nextmessage()) INF_ERR_UNDEF.info(nextmessage())
INF_ERR_UNDEF.debug(nextmessage()) INF_ERR_UNDEF.debug(nextmessage())
INF.info("Messages should bear numbers 0 through 24.") INF.info(FINISH_UP)
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
# Test 1 # Test 1
...@@ -455,10 +466,10 @@ def test_main(): ...@@ -455,10 +466,10 @@ def test_main():
banner("log_test3", "end") banner("log_test3", "end")
finally: finally:
#shut down server #wait for TCP receiver to terminate
tcpserver.abort = 1 socketDataProcessed.acquire()
for thread in threads: socketDataProcessed.wait()
thread.join() socketDataProcessed.release()
banner("logrecv output", "begin") banner("logrecv output", "begin")
sys.stdout.write(sockOut.getvalue()) sys.stdout.write(sockOut.getvalue())
sockOut.close() sockOut.close()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment