initialize libxml error capture when we start processing XML on each thread.

This commit is contained in:
Ross Kinder
2015-12-23 18:54:11 -05:00
parent dc37ddb368
commit 2ab6245e33
2 changed files with 5 additions and 7 deletions

View File

@@ -1,7 +1,6 @@
package xmlsec
import (
"C"
"fmt"
"runtime"
"strings"
@@ -9,6 +8,9 @@ import (
"github.com/crewjam/errset"
)
// void captureXmlErrors();
import "C"
var globalErrors = map[uintptr]errset.ErrSet{}
type libraryError struct {
@@ -61,13 +63,14 @@ func onXmlError(msg *C.char) {
func startProcessingXML() {
runtime.LockOSThread()
globalErrors[getThreadID()] = errset.ErrSet{}
C.captureXmlErrors()
}
// stopProcessingXML unlocks the goroutine-thread lock and deletes the current
// error stack.
func stopProcessingXML() {
runtime.UnlockOSThread()
delete(globalErrors, getThreadID())
runtime.UnlockOSThread()
}
// popError returns the global error for the current thread and resets it to

View File

@@ -27,9 +27,6 @@ import "C"
// }
import "C"
// void captureXmlErrors();
import "C"
func init() {
C.xmlInitParser()
@@ -42,8 +39,6 @@ func init() {
if rv := C.xmlSecCryptoInit(); rv < 0 {
panic("xmlsec crypto initialization failed.")
}
C.captureXmlErrors()
}
func newDoc(buf []byte, idattrs []XMLIDOption) (*C.xmlDoc, error) {