Shutdown fixes

- tell sql thread to finish only after the other threads finished
- prevents other threads stalling on sql replies
This commit is contained in:
Peter Šurda 2018-04-05 12:36:02 +02:00
parent 12117ada99
commit 54c37150e0
Signed by: PeterSurda
GPG Key ID: 0C5F50C0B5F37D87

View File

@ -35,22 +35,24 @@ def doCleanShutdown():
while state.shutdown == 1: while state.shutdown == 1:
time.sleep(.1) time.sleep(.1)
# Wait long enough to guarantee that any running proof of work worker threads will check the
# shutdown variable and exit. If the main thread closes before they do then they won't stop.
time.sleep(.25)
for thread in threading.enumerate():
if (thread is not threading.currentThread() and
isinstance(thread, StoppableThread) and
thread.name != 'SQL'):
logger.debug("Waiting for thread %s", thread.name)
thread.join()
# This one last useless query will guarantee that the previous flush committed and that the # This one last useless query will guarantee that the previous flush committed and that the
# objectProcessorThread committed before we close the program. # objectProcessorThread committed before we close the program.
sqlQuery('SELECT address FROM subscriptions') sqlQuery('SELECT address FROM subscriptions')
logger.info('Finished flushing inventory.') logger.info('Finished flushing inventory.')
sqlStoredProcedure('exit') sqlStoredProcedure('exit')
# Wait long enough to guarantee that any running proof of work worker threads will check the # flush queues
# shutdown variable and exit. If the main thread closes before they do then they won't stop.
time.sleep(.25)
for thread in threading.enumerate():
if thread is not threading.currentThread() and isinstance(thread, StoppableThread):
logger.debug("Waiting for thread %s", thread.name)
thread.join()
# flush queued
for queue in (workerQueue, UISignalQueue, addressGeneratorQueue, objectProcessorQueue): for queue in (workerQueue, UISignalQueue, addressGeneratorQueue, objectProcessorQueue):
while True: while True:
try: try: