@@ -4214,89 +4214,6 @@ def __init__(self, *args, **kwargs):
42144214 handler = logging .getHandlerByName ('custom' )
42154215 self .assertEqual (handler .custom_kwargs , custom_kwargs )
42164216
4217- # See gh-91555 and gh-90321
4218- @support .requires_subprocess ()
4219- def test_deadlock_in_queue (self ):
4220- queue = multiprocessing .Queue ()
4221- handler = logging .handlers .QueueHandler (queue )
4222- logger = multiprocessing .get_logger ()
4223- level = logger .level
4224- try :
4225- logger .setLevel (logging .DEBUG )
4226- logger .addHandler (handler )
4227- logger .debug ("deadlock" )
4228- finally :
4229- logger .setLevel (level )
4230- logger .removeHandler (handler )
4231-
4232- def test_recursion_in_custom_handler (self ):
4233- class BadHandler (logging .Handler ):
4234- def __init__ (self ):
4235- super ().__init__ ()
4236- def emit (self , record ):
4237- logger .debug ("recurse" )
4238- logger = logging .getLogger ("test_recursion_in_custom_handler" )
4239- logger .addHandler (BadHandler ())
4240- logger .setLevel (logging .DEBUG )
4241- logger .debug ("boom" )
4242-
4243- @threading_helper .requires_working_threading ()
4244- def test_thread_supression_noninterference (self ):
4245- lock = threading .Lock ()
4246- logger = logging .getLogger ("test_thread_supression_noninterference" )
4247-
4248- # Block on the first call, allow others through
4249- #
4250- # NOTE: We need to bypass the base class's lock, otherwise that will
4251- # block multiple calls to the same handler itself.
4252- class BlockOnceHandler (TestHandler ):
4253- def __init__ (self , barrier ):
4254- super ().__init__ (support .Matcher ())
4255- self .barrier = barrier
4256-
4257- def createLock (self ):
4258- self .lock = None
4259-
4260- def handle (self , record ):
4261- self .emit (record )
4262-
4263- def emit (self , record ):
4264- if self .barrier :
4265- barrier = self .barrier
4266- self .barrier = None
4267- barrier .wait ()
4268- with lock :
4269- pass
4270- super ().emit (record )
4271- logger .info ("blow up if not supressed" )
4272-
4273- barrier = threading .Barrier (2 )
4274- handler = BlockOnceHandler (barrier )
4275- logger .addHandler (handler )
4276- logger .setLevel (logging .DEBUG )
4277-
4278- t1 = threading .Thread (target = logger .debug , args = ("1" ,))
4279- with lock :
4280-
4281- # Ensure first thread is blocked in the handler, hence supressing logging...
4282- t1 .start ()
4283- barrier .wait ()
4284-
4285- # ...but the second thread should still be able to log...
4286- t2 = threading .Thread (target = logger .debug , args = ("2" ,))
4287- t2 .start ()
4288- t2 .join (timeout = 3 )
4289-
4290- self .assertEqual (len (handler .buffer ), 1 )
4291- self .assertTrue (handler .matches (levelno = logging .DEBUG , message = '2' ))
4292-
4293- # The first thread should still be blocked here
4294- self .assertTrue (t1 .is_alive ())
4295-
4296- # Now the lock has been released the first thread should complete
4297- t1 .join ()
4298- self .assertEqual (len (handler .buffer ), 2 )
4299- self .assertTrue (handler .matches (levelno = logging .DEBUG , message = '1' ))
43004217
43014218class ManagerTest (BaseTest ):
43024219 def test_manager_loggerclass (self ):
0 commit comments