96 lines · 2.2 KB · Python
RawDownload
#!/usr/bin/python -uimport string, sys, timeimport threadfrom threading import Thread, Lock import libxml2 THREADS_COUNT = 15 failed = 0 class ErrorHandler:     def __init__(self):        self.errors = []        self.lock = Lock()     def handler(self,ctx,str):        self.lock.acquire()        self.errors.append(str)        self.lock.release() def getLineNumbersDefault():    old = libxml2.lineNumbersDefault(0)    libxml2.lineNumbersDefault(old)    return old def test(expectedLineNumbersDefault):    time.sleep(1)    global failed    # check a per thread-global    if expectedLineNumbersDefault != getLineNumbersDefault():        failed = 1        print "FAILED to obtain correct value for " \              "lineNumbersDefault in thread %d" % thread.get_ident()    # check ther global error handler     # (which is NOT per-thread in the python bindings)    try:        doc = libxml2.parseFile("bad.xml")    except:        pass    else:        assert "failed" # global error handlereh = ErrorHandler()libxml2.registerErrorHandler(eh.handler,"") # set on the main thread onlylibxml2.lineNumbersDefault(1) test(1)ec = len(eh.errors)if ec == 0:    print "FAILED: should have obtained errors"    sys.exit(1) ts = []for i in range(THREADS_COUNT):    # expect 0 for lineNumbersDefault because    # the new value has been set on the main thread only    ts.append(Thread(target=test,args=(0,)))for t in ts:    t.start()for t in ts:    t.join() if len(eh.errors) != ec+THREADS_COUNT*ec:    print "FAILED: did not obtain the correct number of errors"    sys.exit(1) # set lineNumbersDefault for future new threadslibxml2.thrDefLineNumbersDefaultValue(1)ts = []for i in range(THREADS_COUNT):    # expect 1 for lineNumbersDefault    ts.append(Thread(target=test,args=(1,)))for t in ts:    t.start()for t in ts:    t.join() if len(eh.errors) != ec+THREADS_COUNT*ec*2:    print "FAILED: did not obtain the correct number of errors"    sys.exit(1) if failed:    print "FAILED"    sys.exit(1) # Memory debug specificlibxml2.cleanupParser()if libxml2.debugMemory(1) == 0:    print "OK"else:    print "Memory leak %d bytes" % (libxml2.debugMemory(1))    libxml2.dumpMemory()

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t