initialize libxml error capture when we start processing XML on each thread.
This commit is contained in:
7
error.go
7
error.go
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user