nativeaudio

audio playback for Go
Log | Files | Refs | README | LICENSE

commit d1e38c3868005fe442299772d84306c7960571f6
parent b94efcdfe4f3304c6ea9de1da665ef3e3ff3c29c
Author: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Date:   Tue, 26 Oct 2021 15:48:12 +0800

nativeaudio: [fix] free errors

ErrorFree was failing because it was trying to free `const * char`
string literals which were never dynamically allocated.

Signed-off-by: Jack Mordaunt <jackmordaunt.dev@gmail.com>

Diffstat:
Maudio_windows.c | 11+++--------
Maudio_windows.go | 8++++----
2 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/audio_windows.c b/audio_windows.c @@ -31,20 +31,15 @@ ErrorWithCode(Error *err, int code) } // ErrorFree deallocates the error and any wrapped errors. -// BUG: heap corruption. void ErrorFree(Error* err) { - // cursor points to the error currently being processed. - Error *cursor = NULL; - + Error *tmp = NULL; while (err != NULL) { - cursor = err; - if (cursor->Str != NULL) - free(cursor->Str); - free(cursor); + tmp = err; err = err->Err; + free(tmp); } } diff --git a/audio_windows.go b/audio_windows.go @@ -25,8 +25,8 @@ func play(path string) error { defer C.free(unsafe.Pointer(cPath)) err := C.Play(cPath) if err != nil { - defer C.free(unsafe.Pointer(err)) - return fmt.Errorf(C.GoString(err.Str)) + defer C.ErrorFree(err) + return collectErrors(err) } return nil } @@ -42,7 +42,7 @@ func load(path string) ([]byte, Format, error) { defer C.free(unsafe.Pointer(cPath)) r := C.Load(cPath) if r.Err != nil { - // defer C.ErrorFree(result.Err) + defer C.ErrorFree(r.Err) return nil, Format{}, collectErrors(r.Err) } defer C.BufferFree(r.Uncompressed) @@ -63,7 +63,7 @@ func decode(compressed []byte) (uncompressed []byte, format Format, err error) { defer runtime.KeepAlive(compressed) r := C.Decode((*C.uchar)(C.CBytes(compressed)), C.uint(len(compressed))) if r.Err != nil && r.Err.Str != nil { - // TODO(jfm): Free result. + defer C.ErrorFree(r.Err) return nil, format, collectErrors(r.Err) } defer C.BufferFree(r.Uncompressed)