don't know if it's related, but maybe adding below to your callback (from
portaudio callback) will shed some light on your problem
defer func() {
// Don't let PortAudio silently swallow panics.
if x := recover(); x != nil {
buf := make([]byte, 1<<10)
for runtime.Stack(buf, true) == len(buf) {
buf = make([]byte, 2*len(buf))
}
fmt.Fprintf(os.Stderr, "panic in portaudio stream callback: %s\n\n%s", x,
buf)
os.Exit(2)
}
}()
On Tuesday, 2 October 2018 02:00:36 UTC+2, Ian Lance Taylor wrote:
>
> On Mon, Oct 1, 2018 at 4:52 PM, pba <[email protected] <javascript:>>
> wrote:
> >
> > I'm running into a situation where my program deadlocks due to
> (apparently)
> > a call to runtime.(*sigctxt).preparePanic which never exits (stack
> below).
> >
> > The program uses cgo and passes callbacks to the C library, this
> particular
> > panic seems to be triggered when the go callback returns to the C code.
> I
> > cannot debug the C code (binary dependency).
> >
> > Any suggestions on how to make the the program crash cleanly (i.e. panic
> and
> > exit) ?
> >
> > go version go1.11 darwin/amd64
> > macOS Sierra (10.12.6)
> >
> > 2359 Thread_1644947
> > + 2359 _sigtramp (in libsystem_platform.dylib) + 26
> [0x7fff9656cb3a]
> > + 2359 runtime.sigtramp (in test) + 51 [0x4065fe3]
> > + 2359 runtime.sigtrampgo (in test) + 544 [0x4049000]
> > + 2359 runtime.sighandler (in test) + 1788 [0x404866c]
> > + 2359 runtime.(*sigctxt).preparePanic (in test) + 172
> > [0x40475fc]
>
> preparePanic is only called if your program has already gotten a
> signal. In this case it looks like preparePanic is itself causing a
> signal. There is some special code in Darwin that fires when a
> program does a division by zero or otherwise gets a SIGFPE signal; is
> it possible that this is happening in your program?
>
> Ian
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.