Please help, I humbly beg!

First, the environment:

go version go1.16.5 darwin/arm64
ImageMagick 7.0.11-8 Q16 arm 2021-04-17
macOS Big Sur, version 11.4 on Mac Mini M1, 16 GB

I've run into a brick wall with Go driving the Imagemagick 7 API on a 16
GB M1 Mac Mini. The problem occurs when combining an image read and
pixel extraction in a tight loop. The first two lines, which cure the 
problem, 
were suggested by Justin Israel. Note: it doesn't always crash, but the 
attached
PNG fails 100% of the time.

Thanks for looking.


The code looks like this:

package main

import (
"fmt"
"runtime"
"gopkg.in/gographics/imagick.v3/imagick"
)

func main() {
// runtime.LockOSThread()
// defer runtime.UnlockOSThread()

var my_grayscale = "/Path/to/your/8bit/grayscale.jpg"
// use a large size image to stress test, perhaps 1500x1500, any supported 
format.
var err error

imagick.Initialize()
defer imagick.Terminate()

for i := 1; i < 5001; i++ {
outline := imagick.NewMagickWand()
err = outline.ReadImage(my_grayscale)
if err != nil {
panic(err)
}
width := outline.GetImageWidth()
height := outline.GetImageHeight()

pix, err := outline.ExportImagePixels(0, 0, width, height, "I", 
imagick.PIXEL_CHAR)
if err != nil {
panic(err)
}

pixels, ok := pix.([]byte)
if !ok {
panic("Pixels not extracted")
}

fmt.Printf("%d: %d pixels.\n", i, len(pixels))
outline.Destroy()
}
fmt.Println("Done")
}

The crashlog and backtrace follow.

goroutine 0 [idle]:
runtime: unknown pc 0x185100e68
stack: frame={sp:0x172f4e890, fp:0x0} stack=[0x172ecf338,0x172f4ef38)
0000000172f4e790:  0000000102650400  0000000000000081 
0000000172f4e7a0:  0000000172f4e7e0  773280018514fd14 
0000000172f4e7b0:  3fd3333333333333  0000000000000000 
0000000172f4e7c0:  0000000000000000  000000010265a128 
0000000172f4e7d0:  00000001026494a8  0000000172f4e970 
0000000172f4e7e0:  0000000172f4e8e0  b23e00018514fc34 
0000000172f4e7f0:  0000000132e11420  0000000000000005 
0000000172f4e800:  3fd3333333333333  0000000000000000 
0000000172f4e810:  3feeddf5de1dde88  0000000000000000 
0000000172f4e820:  3ff5f39f935568db  0000000000000000 
0000000172f4e830:  3fdb01b18088d6a0  0000000000000000 
0000000172f4e840:  0706050403020100  0f0e0d0c0b0a0908 
0000000172f4e850:  00000001e404fa08  00000001f045e8b0 
0000000172f4e860:  000000018503dde4  0000000000000000 
0000000172f4e870:  0000000172f4e8b0  f1520001850407e8 
0000000172f4e880:  000000013701c200  0000000000000000 
0000000172f4e890: <0000000000000000  000000010265a128 
0000000172f4e8a0:  00000001026494a8  0000000172f4e8d8 
0000000172f4e8b0:  0000000172f4e8f0  fc6100018507b460 
0000000172f4e8c0:  0000000132e11420  ffffffff00000024 
0000000172f4e8d0:  0000000000000001  00000001fffff9df 
0000000172f4e8e0:  00000001026494a8  0000000172f4e970 
0000000172f4e8f0:  0000000172f4e900  713e8001025fc30c 
0000000172f4e900:  0000000172f4e930  00000001025faec4 
0000000172f4e910:  0000000000000000  0000000000000000 
0000000172f4e920:  0000000000000000  0000000172f4e940 
0000000172f4e930:  0000000172f4e9b0  00000001025f8f34 
0000000172f4e940:  0000000172f4e970  0000000172f4e950 
0000000172f4e950:  0000000000000000  0000000000000000 
0000000172f4e960:  0000000000000000  0000000000000000 
0000000172f4e970:  0000000100000005  0000000132e11bf0 
0000000172f4e980:  0000000000000134  0000000d00000004 
runtime: unknown pc 0x185100e68
stack: frame={sp:0x172f4e890, fp:0x0} stack=[0x172ecf338,0x172f4ef38)
0000000172f4e790:  0000000102650400  0000000000000081 
0000000172f4e7a0:  0000000172f4e7e0  773280018514fd14 
0000000172f4e7b0:  3fd3333333333333  0000000000000000 
0000000172f4e7c0:  0000000000000000  000000010265a128 
0000000172f4e7d0:  00000001026494a8  0000000172f4e970 
0000000172f4e7e0:  0000000172f4e8e0  b23e00018514fc34 
0000000172f4e7f0:  0000000132e11420  0000000000000005 
0000000172f4e800:  3fd3333333333333  0000000000000000 
0000000172f4e810:  3feeddf5de1dde88  0000000000000000 
0000000172f4e820:  3ff5f39f935568db  0000000000000000 
0000000172f4e830:  3fdb01b18088d6a0  0000000000000000 
0000000172f4e840:  0706050403020100  0f0e0d0c0b0a0908 
0000000172f4e850:  00000001e404fa08  00000001f045e8b0 
0000000172f4e860:  000000018503dde4  0000000000000000 
0000000172f4e870:  0000000172f4e8b0  f1520001850407e8 
0000000172f4e880:  000000013701c200  0000000000000000 
0000000172f4e890: <0000000000000000  000000010265a128 
0000000172f4e8a0:  00000001026494a8  0000000172f4e8d8 
0000000172f4e8b0:  0000000172f4e8f0  fc6100018507b460 
0000000172f4e8c0:  0000000132e11420  ffffffff00000024 
0000000172f4e8d0:  0000000000000001  00000001fffff9df 
0000000172f4e8e0:  00000001026494a8  0000000172f4e970 
0000000172f4e8f0:  0000000172f4e900  713e8001025fc30c 
0000000172f4e900:  0000000172f4e930  00000001025faec4 
0000000172f4e910:  0000000000000000  0000000000000000 
0000000172f4e920:  0000000000000000  0000000172f4e940 
0000000172f4e930:  0000000172f4e9b0  00000001025f8f34 
0000000172f4e940:  0000000172f4e970  0000000172f4e950 
0000000172f4e950:  0000000000000000  0000000000000000 
0000000172f4e960:  0000000000000000  0000000000000000 
0000000172f4e970:  0000000100000005  0000000132e11bf0 
0000000172f4e980:  0000000000000134  0000000d00000004 

goroutine 1 [syscall]:
runtime.cgocall(0x102371528, 0x14000051d38, 0x14000000100)
        /usr/local/go/src/runtime/cgocall.go:154 +0x50 fp=0x14000051d00 
sp=0x14000051cc0 pc=0x1022d5ad0
gopkg.in/gographics/imagick.v3/imagick._Cfunc_MagickExportImagePixels(0x137008200,
 
0x0, 0x0, 0x614, 0x639, 0x132e11020, 0x100000001, 0x140003de000, 0x0)
        _cgo_gotypes.go:4595 +0x44 fp=0x14000051d30 sp=0x14000051d00 
pc=0x10236bcc4
gopkg.in/gographics/imagick.v3/imagick.(*MagickWand).ExportImagePixels.func2(0x1400009c000,
 
0x0, 0x0, 0x614, 0x639, 0x132e11020, 0x1, 0x140003de000, 0x14000052000)
        
/Users/rwschaaf/go/src/gopkg.in/gographics/imagick.v3/imagick/magick_wand_image.go:799
 
+0xa4 fp=0x14000051d90 sp=0x14000051d30 pc=0x10236dbd4
gopkg.in/gographics/imagick.v3/imagick.(*MagickWand).ExportImagePixels(0x1400009c000,
 
0x0, 0x0, 0x614, 0x639, 0x10237ae0c, 0x1, 0x1, 0x0, 0x0, ...)
        
/Users/rwschaaf/go/src/gopkg.in/gographics/imagick.v3/imagick/magick_wand_image.go:799
 
+0x288 fp=0x14000051e90 sp=0x14000051d90 pc=0x10236ce08
main.main()
        /Users/rwschaaf/go/src/github.com/rwschaaf/stresstest/main.go:28 
+0x190 fp=0x14000051f70 sp=0x14000051e90 pc=0x10236e3a0
runtime.main()
        /usr/local/go/src/runtime/proc.go:225 +0x26c fp=0x14000051fd0 
sp=0x14000051f70 pc=0x102304e1c
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1130 +0x4 fp=0x14000051fd0 
sp=0x14000051fd0 pc=0x102332274

r0      0x0
r1      0x0
r2      0x0
r3      0x0
r4      0x132e11420
r5      0x20
r6      0x0
r7      0x140003de000
r8      0xffddb2351033c6dc
r9      0xffddb23462c736dc
r10     0x3ffe
r11     0x1fbf51702
r12     0x1fbf51702
r13     0x1e
r14     0x881
r15     0x8000001f
r16     0x148
r17     0x1f3a8ae90
r18     0x0
r19     0x6
r20     0x172f4f000
r21     0x1b03
r22     0x172f4f0e0
r23     0x0
r24     0x13701c200
r25     0x132e11030
r26     0x140003de000
r27     0x10265a240
r28     0x0
r29     0x172f4e8b0
lr      0x18513343c
sp      0x172f4e890
pc      0x185100e68
fault   0x185100e68


-- 
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 golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/ab7deff4-43c0-4122-944d-6313290a07dcn%40googlegroups.com.

Reply via email to