Hi,
I'm developing speech-to-text inference server with cpp libraries (wav2letter)
"A goroutine should call LockOSThread before calling OS services or
non-Go library functions that depend on per-thread state"
The current server process as fallow
func requestHandler(stream grpc....) {
# runtime.LockOSThread()
var decoder unsafe.Pointer
init := false
defer func() {
if decoder != nil {
C.resetDecoder(decoder)
}
}
for {
in, err := stream.Recv(); // grpc streaming
if err != nil {
break;
}
if init == true {
C.decode(decoder, someTransformFunc(in.audio))
} else {
decoder = C.getDecoder()
init = true
}
}
}
Even if I don't call runtime.LockOSThread(), it works.
but memory leak occured when repeated.
( VmData keep increasing on /proc/{pid}/status )
If I call runtime.LockOSThread(), it works good and no memory leak.
why does a memory leak occur only when runtime.LockOSThread() is not called?