Comment 5 for bug 1524907

Revision history for this message
Victor Stinner (vstinner) wrote : Re: Race condition in SIGTERM signal handler

I forgot to give an example of traceback:

[req-4c7d45e7-8220-42cd-9ecd-903566198453 - - - - -] Unhandled exception
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/oslo_service/service.py", line 377, in _child_wait_for_exit_or_signal
    launcher.wait()
  File "/usr/lib/python2.7/site-packages/oslo_service/service.py", line 204, in wait
    self.services.wait()
  File "/usr/lib/python2.7/site-packages/oslo_service/service.py", line 625, in wait
    service.wait()
  File "/usr/lib/python2.7/site-packages/oslo_service/service.py", line 591, in wait
    self._done.wait()
  File "/usr/lib/python2.7/site-packages/eventlet/event.py", line 121, in wait
    return hubs.get_hub().switch()
  File "/usr/lib/python2.7/site-packages/eventlet/hubs/hub.py", line 294, in switch
    return self.greenlet.switch()
  File "/usr/lib/python2.7/site-packages/eventlet/hubs/hub.py", line 346, in run
    self.wait(sleep_time)
  File "/usr/lib/python2.7/site-packages/eventlet/hubs/poll.py", line 85, in wait
    presult = self.do_poll(seconds)
  File "/usr/lib/python2.7/site-packages/eventlet/hubs/epolls.py", line 62, in do_poll
    return self.poll.poll(seconds)
  File "/usr/lib/python2.7/site-packages/oslo_service/service.py", line 160, in _handle_signals
    handler(signo, frame)
  File "/usr/lib/python2.7/site-packages/oslo_service/service.py", line 355, in _sigterm
    SignalHandler().clear()
  File "/usr/lib/python2.7/site-packages/oslo_service/service.py", line 116, in __call__
    with lockutils.lock('singleton_lock', semaphores=cls._semaphores):
  File "/usr/lib64/python2.7/contextlib.py", line 17, in __enter__
    return self.gen.next()
  File "/usr/lib/python2.7/site-packages/oslo_concurrency/lockutils.py", line 195, in lock
    int_lock = internal_lock(name, semaphores=semaphores)
  File "/usr/lib/python2.7/site-packages/oslo_concurrency/lockutils.py", line 160, in internal_lock
    return semaphores.get(name)
  File "/usr/lib/python2.7/site-packages/oslo_concurrency/lockutils.py", line 109, in get
    sem = threading.Semaphore()
  File "/usr/lib64/python2.7/threading.py", line 423, in Semaphore
    return _Semaphore(*args, **kwargs)
  File "/usr/lib64/python2.7/threading.py", line 439, in __init__
    self.__cond = Condition(Lock())
  File "/usr/lib64/python2.7/threading.py", line 252, in Condition
    return _Condition(*args, **kwargs)
  File "/usr/lib64/python2.7/threading.py", line 260, in __init__
    _Verbose.__init__(self, verbose)
  File "/usr/lib/python2.7/site-packages/oslo_service/service.py", line 160, in _handle_signals
    handler(signo, frame)
  File "/usr/lib/python2.7/site-packages/oslo_service/service.py", line 355, in _sigterm
    SignalHandler().clear()
  File "/usr/lib/python2.7/site-packages/oslo_service/service.py", line 116, in __call__
    with lockutils.lock('singleton_lock', semaphores=cls._semaphores):
  File "/usr/lib64/python2.7/contextlib.py", line 17, in __enter__
    return self.gen.next()
  File "/usr/lib/python2.7/site-packages/oslo_concurrency/lockutils.py", line 195, in lock
    int_lock = internal_lock(name, semaphores=semaphores)
  File "/usr/lib/python2.7/site-packages/oslo_concurrency/lockutils.py", line 160, in internal_lock
    return semaphores.get(name)
  File "/usr/lib/python2.7/site-packages/oslo_concurrency/lockutils.py", line 105, in get
    with self._lock:
  File "/usr/lib/python2.7/site-packages/eventlet/semaphore.py", line 127, in __enter__
    self.acquire()
  File "/usr/lib/python2.7/site-packages/eventlet/semaphore.py", line 113, in acquire
    hubs.get_hub().switch()
  File "/usr/lib/python2.7/site-packages/eventlet/hubs/hub.py", line 280, in switch
    assert cur is not self.greenlet, 'Cannot switch to MAINLOOP from MAINLOOP'
AssertionError: Cannot switch to MAINLOOP from MAINLOOP