little stabilization of multi threading

This commit is contained in:
Miroslav Stampar 2011-06-17 12:50:28 +00:00
parent 2171c64213
commit 9498a3f259
3 changed files with 21 additions and 6 deletions

View File

@ -9,12 +9,14 @@ See the file 'doc/COPYING' for copying permission
import difflib
import threading
import time
from lib.core.data import kb
from lib.core.data import logger
from lib.core.datatype import advancedDict
from lib.core.exception import sqlmapThreadException
from lib.core.settings import MAX_NUMBER_OF_THREADS
from lib.core.settings import PYVERSION
shared = advancedDict()
@ -98,20 +100,25 @@ def runThreads(numThreads, threadFunction, cleanupFunction=None, forwardExceptio
# Start the threads
for numThread in range(numThreads):
thread = threading.Thread(target=exceptionHandledFunction, name=str(numThread), args=[threadFunction])
# Reference: http://stackoverflow.com/questions/190010/daemon-threads-explanation
if PYVERSION >= "2.6":
thread.daemon = True
else:
thread.setDaemon(True)
thread.start()
threads.append(thread)
# And wait for them to all finish
try:
alive = True
while alive:
alive = False
for thread in threads:
if thread.isAlive():
alive = True
thread.join(1)
time.sleep(1)
except KeyboardInterrupt:
kb.threadContinue = False

View File

@ -43,6 +43,7 @@ from lib.core.settings import INFERENCE_UNKNOWN_CHAR
from lib.core.settings import INFERENCE_GREATER_CHAR
from lib.core.settings import INFERENCE_EQUALS_CHAR
from lib.core.settings import INFERENCE_NOT_EQUALS_CHAR
from lib.core.settings import PYVERSION
from lib.core.unescaper import unescaper
from lib.request.connect import Connect as Request
@ -413,6 +414,12 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None
# Start the threads
for numThread in range(numThreads):
thread = threading.Thread(target=downloadThread, name=str(numThread))
if PYVERSION >= "2.6":
thread.daemon = True
else:
thread.setDaemon(True)
thread.start()
threads.append(thread)
@ -424,7 +431,8 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None
for thread in threads:
if thread.isAlive():
alive = True
thread.join(5)
time.sleep(1)
except KeyboardInterrupt:
kb.threadContinue = False
raise

View File

@ -129,8 +129,8 @@ def main():
kb.threadContinue = False
kb.threadException = True
# just in case handling of leftover threads
raise SystemExit
# Reference: http://stackoverflow.com/questions/1635080/terminate-a-multi-thread-python-program
os._exit(0)
if __name__ == "__main__":
main()