Annotation of embedaddon/libxml2/python/tests/thread2.py, revision 1.1.1.1

1.1       misho       1: #!/usr/bin/python -u
                      2: import string, sys, time
                      3: import thread
                      4: from threading import Thread, Lock
                      5: 
                      6: import libxml2
                      7: 
                      8: THREADS_COUNT = 15
                      9: 
                     10: failed = 0
                     11: 
                     12: class ErrorHandler:
                     13: 
                     14:     def __init__(self):
                     15:         self.errors = []
                     16:         self.lock = Lock()
                     17: 
                     18:     def handler(self,ctx,str):
                     19:         self.lock.acquire()
                     20:         self.errors.append(str)
                     21:         self.lock.release()
                     22: 
                     23: def getLineNumbersDefault():
                     24:     old = libxml2.lineNumbersDefault(0)
                     25:     libxml2.lineNumbersDefault(old)
                     26:     return old
                     27: 
                     28: def test(expectedLineNumbersDefault):
                     29:     time.sleep(1)
                     30:     global failed
                     31:     # check a per thread-global
                     32:     if expectedLineNumbersDefault != getLineNumbersDefault():
                     33:         failed = 1
                     34:         print "FAILED to obtain correct value for " \
                     35:               "lineNumbersDefault in thread %d" % thread.get_ident()
                     36:     # check ther global error handler 
                     37:     # (which is NOT per-thread in the python bindings)
                     38:     try:
                     39:         doc = libxml2.parseFile("bad.xml")
                     40:     except:
                     41:         pass
                     42:     else:
                     43:         assert "failed"
                     44: 
                     45: # global error handler
                     46: eh = ErrorHandler()
                     47: libxml2.registerErrorHandler(eh.handler,"")
                     48: 
                     49: # set on the main thread only
                     50: libxml2.lineNumbersDefault(1) 
                     51: test(1)
                     52: ec = len(eh.errors)
                     53: if ec == 0:
                     54:     print "FAILED: should have obtained errors"
                     55:     sys.exit(1)
                     56: 
                     57: ts = []
                     58: for i in range(THREADS_COUNT):
                     59:     # expect 0 for lineNumbersDefault because
                     60:     # the new value has been set on the main thread only
                     61:     ts.append(Thread(target=test,args=(0,)))
                     62: for t in ts:
                     63:     t.start()
                     64: for t in ts:
                     65:     t.join()
                     66: 
                     67: if len(eh.errors) != ec+THREADS_COUNT*ec:
                     68:     print "FAILED: did not obtain the correct number of errors"
                     69:     sys.exit(1)
                     70: 
                     71: # set lineNumbersDefault for future new threads
                     72: libxml2.thrDefLineNumbersDefaultValue(1)
                     73: ts = []
                     74: for i in range(THREADS_COUNT):
                     75:     # expect 1 for lineNumbersDefault
                     76:     ts.append(Thread(target=test,args=(1,)))
                     77: for t in ts:
                     78:     t.start()
                     79: for t in ts:
                     80:     t.join()
                     81: 
                     82: if len(eh.errors) != ec+THREADS_COUNT*ec*2:
                     83:     print "FAILED: did not obtain the correct number of errors"
                     84:     sys.exit(1)
                     85: 
                     86: if failed:
                     87:     print "FAILED"
                     88:     sys.exit(1)
                     89: 
                     90: # Memory debug specific
                     91: libxml2.cleanupParser()
                     92: if libxml2.debugMemory(1) == 0:
                     93:     print "OK"
                     94: else:
                     95:     print "Memory leak %d bytes" % (libxml2.debugMemory(1))
                     96:     libxml2.dumpMemory()

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>