Skip to content

go1.3.3 hashmap bug #9335

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
jerfly opened this issue Dec 16, 2014 · 8 comments
Closed

go1.3.3 hashmap bug #9335

jerfly opened this issue Dec 16, 2014 · 8 comments

Comments

@jerfly
Copy link

jerfly commented Dec 16, 2014

when call: CreateTables[Code] = Code
throw error:
fatal error: bad state

goroutine 20 [running]:
runtime.throw(0x8663e8)
c:/go/src/pkg/runtime/panic.c:520 +0x71 fp=0x1d3c34 sp=0x1d3c28
evacuate(0x5f76e0, 0x125ae400, 0x10)
c:/go/src/pkg/runtime/hashmap.goc:205 +0x1bb fp=0x1d3c8c sp=0x1d3c34
grow_work(0x5f76e0, 0x125ae400, 0x48)
c:/go/src/pkg/runtime/hashmap.goc:321 +0x76 fp=0x1d3ca0 sp=0x1d3c8c
hash_insert(0x5f76e0, 0x125ae400, 0x12af48dc, 0x12af48dc)
c:/go/src/pkg/runtime/hashmap.goc:499 +0xba fp=0x1d3cec sp=0x1d3ca0
runtime.mapassign1(0x5f76e0, 0x125ae400, 0x12af48dc, 0x12af48dc)
c:/go/src/pkg/runtime/hashmap.goc:933 +0x3b fp=0x1d3d04 sp=0x1d3cec
stock/server.(*DatabaseMarkStock).Execute(0x125900e0)
D:/GoProject/src/stock/server/DatabaseMarkStock.go:253 +0x7f0 fp=0x1d3fc8 sp=0x1d3d04
runtime.goexit()
c:/go/src/pkg/runtime/proc.c:1445 fp=0x1d3fcc sp=0x1d3fc8
created by main.main

@bradfitz
Copy link
Contributor

Go 1.3 is no longer maintained now that Go 1.4 is out.

Also, this is probably a data race on your part.

Please try with Go 1.4 and use the race detector. If you have a data race, the Go runtime guarantees nothing.

@jerfly
Copy link
Author

jerfly commented Dec 16, 2014

when i change to go1.4
throw:

runtime: garbage collector found invalid heap pointer *(0x12546800+0xc0c)=0x1 s=nil
runtime: found *(0x12aecf00+0x52fc) = 0x12546800+0x0
runtime: found *(0x124e56e0+0x10) = 0x12aecf00+0x0
runtime: found *(0x125c4db4+0x28) = 0x124e56e0+0x0
fatal error: bad pointer

runtime stack:
runtime.throw(0x8257f9)
c:/go/src/runtime/panic.go:491 +0x83 fp=0xcf8d8 sp=0xcf8c0
scanblock(0x125c4db4, 0x230, 0x72b43c)
c:/go/src/runtime/mgc0.c:412 +0x780 fp=0xcf978 sp=0xcf8d8
scanframe(0xcfa04, 0x0, 0x201)
c:/go/src/runtime/mgc0.c:719 +0x13a fp=0xcf9b4 sp=0xcf978
runtime.gentraceback(0x4136be, 0x125c4d04, 0x0, 0x124f2a00, 0x0, 0x0, 0x7fffffff, 0xcfa5c, 0x0, 0x0, ...)
c:/go/src/runtime/traceback.go:311 +0x5c5 fp=0xcfa30 sp=0xcf9b4
scanstack(0x124f2a00)
c:/go/src/runtime/mgc0.c:777 +0x1e0 fp=0xcfa68 sp=0xcfa30
markroot(0x124ea190, 0x9)
c:/go/src/runtime/mgc0.c:553 +0xcd fp=0xcfaa0 sp=0xcfa68
runtime.parfordo(0x124ea190)
c:/go/src/runtime/parfor.c:91 +0x115 fp=0xcfafc sp=0xcfaa0
gc(0xcfc38)
c:/go/src/runtime/mgc0.c:1439 +0x1fb fp=0xcfc28 sp=0xcfafc
runtime.gc_m()
c:/go/src/runtime/mgc0.c:1373 +0xe7 fp=0xcfc48 sp=0xcfc28
runtime.onM(0xcfeec)
c:/go/src/runtime/asm_386.s:266 +0x50 fp=0xcfc4c sp=0xcfc48
runtime.mstart()
c:/go/src/runtime/proc.c:818 fp=0xcfc50 sp=0xcfc4c

but in go1.3.3,no this error

@minux
Copy link
Member

minux commented Dec 16, 2014

Are you using cgo? Perhaps you have saved a small integer (0x1) in a
pointer field.
Or perhaps there are some kind of memory corruption bug in the program (for
example, due to data races)

@jerfly
Copy link
Author

jerfly commented Dec 16, 2014

in errors,i see cgocall when i call syscall_windows

runtime: garbage collector found invalid heap pointer *(0x125d8800+0xc0c)=0x1 s=nil
runtime: found *(0x12c5af00+0x22e4) = 0x125d8800+0x0
runtime: found *(0x125756e0+0x10) = 0x12c5af00+0x0
runtime: found *(0x12586db4+0x28) = 0x125756e0+0x0
fatal error: bad pointer

runtime stack:
runtime.throw(0x8257f9)
    c:/go/src/runtime/panic.go:491 +0x83 fp=0xcf8d8 sp=0xcf8c0
scanblock(0x12586db4, 0x230, 0x72b524)
    c:/go/src/runtime/mgc0.c:412 +0x780 fp=0xcf978 sp=0xcf8d8
scanframe(0xcfa04, 0x0, 0x201)
    c:/go/src/runtime/mgc0.c:719 +0x13a fp=0xcf9b4 sp=0xcf978
runtime.gentraceback(0x4136be, 0x12586d04, 0x0, 0x125828c0, 0x0, 0x0, 0x7fffffff, 0xcfa5c, 0x0, 0x0, ...)
    c:/go/src/runtime/traceback.go:311 +0x5c5 fp=0xcfa30 sp=0xcf9b4
scanstack(0x125828c0)
    c:/go/src/runtime/mgc0.c:777 +0x1e0 fp=0xcfa68 sp=0xcfa30
markroot(0x1257a190, 0x9)
    c:/go/src/runtime/mgc0.c:553 +0xcd fp=0xcfaa0 sp=0xcfa68
runtime.parfordo(0x1257a190)
    c:/go/src/runtime/parfor.c:91 +0x115 fp=0xcfafc sp=0xcfaa0
gc(0xcfc38)
    c:/go/src/runtime/mgc0.c:1439 +0x1fb fp=0xcfc28 sp=0xcfafc
runtime.gc_m()
    c:/go/src/runtime/mgc0.c:1373 +0xe7 fp=0xcfc48 sp=0xcfc28
runtime.onM(0xcfeec)
    c:/go/src/runtime/asm_386.s:266 +0x50 fp=0xcfc4c sp=0xcfc48
runtime.mstart()
    c:/go/src/runtime/proc.c:818 fp=0xcfc50 sp=0xcfc4c

goroutine 1 [garbage collection, locked to thread]:
runtime.switchtoM()
    c:/go/src/runtime/asm_386.s:208 fp=0x125b30dc sp=0x125b30d8
runtime.gogc(0x0)
    c:/go/src/runtime/malloc.go:469 +0x1aa fp=0x125b30fc sp=0x125b30dc
runtime.mallocgc(0x60, 0x66c500, 0x0, 0x13c9a7d0)
    c:/go/src/runtime/malloc.go:341 +0x2c4 fp=0x125b3154 sp=0x125b30fc
runtime.newobject(0x66c500, 0x13c9df80)
    c:/go/src/runtime/malloc.go:353 +0x48 fp=0x125b3168 sp=0x125b3154
stock/tools.BytesToWord(0x13c8ca69, 0x4, 0xab, 0x436e0000, 0x0, 0x0)
    D:/GoProject/src/stock/tools/Tool.go:103 +0x59 fp=0x125b31b8 sp=0x125b3168
stock/tools.BytesToFloat(0x13c8ca69, 0x4, 0xab, 0x436e0000, 0x0, 0x0)
    D:/GoProject/src/stock/tools/Tool.go:147 +0x55 fp=0x125b31d8 sp=0x125b31b8
stock/nezip.(*MarketStockDataV5).Read(0x13c8c6c0, 0x356f3c4d)
    D:/GoProject/src/stock/nezip/MarketStockDataV5.go:165 +0xfa9 fp=0x125b3240 sp=0x125b31d8
stock/server.NezipStockServer(0x356e0000, 0x356e0000)
    D:/GoProject/src/stock/server/NezipServer.go:41 +0x1fb fp=0x125b335c sp=0x125b3240
runtime.call16(0x7308fc, 0xcfc84, 0x8, 0x0)
    c:/go/src/runtime/asm_386.s:412 +0x41 fp=0x125b3370 sp=0x125b335c
runtime.cgocallbackg1()
    c:/go/src/runtime/cgocall.go:239 +0xf3 fp=0x125b33a0 sp=0x125b3370
runtime.cgocallbackg()
    c:/go/src/runtime/cgocall.go:193 +0x57 fp=0x125b33b8 sp=0x125b33a0
runtime.cgocallback_gofunc(0x43522d, 0x404350, 0x4361f0)
    c:/go/src/runtime/asm_386.s:781 +0x4a fp=0x125b33c8 sp=0x125b33b8
asmcgocall()
    c:/go/src/runtime/asm_386.s:667 +0x24 fp=0x125b33cc sp=0x125b33c8
runtime.asmcgocall_errno(0x4361f0, 0x125b33f4, 0x40436b)
    c:/go/src/runtime/asm_386.s:649 +0xd fp=0x125b33d0 sp=0x125b33cc
runtime.cgocall_errno(0x4361f0, 0x125b33f4, 0x0)
    c:/go/src/runtime/cgocall.go:131 +0xd0 fp=0x125b33e8 sp=0x125b33d0
runtime.syscall_Syscall6(0x759378e2, 0x4, 0x1391745c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
    c:/go/src/runtime/syscall_windows.go:138 +0x58 fp=0x125b3418 sp=0x125b33e8
github.com/lxn/win.GetMessage(0x125b345c, 0x0, 0x0, 0x0, 0x1)
    D:/go/party/src/github.com/lxn/win/user32.go:2029 +0x62 fp=0x125b3448 sp=0x125b3418
github.com/lxn/walk.(*FormBase).Run(0x125c8000, 0x0)
    D:/go/party/src/github.com/lxn/walk/form.go:227 +0x78 fp=0x125b347c sp=0x125b3448
github.com/lxn/walk/declarative.MainWindow.Run(0x125e8038, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
    D:/go/party/src/github.com/lxn/walk/declarative/mainwindow.go:112 +0xca fp=0x125b354c sp=0x125b347c
main.main()

@jerfly
Copy link
Author

jerfly commented Dec 16, 2014

but why in go1.3.3,no this error?

@minux
Copy link
Member

minux commented Dec 16, 2014

Go 1.3.3 GC ignores invalid pointers, but Go 1.4 GC enforces the
check.

For 1.4, you can set GODEBUG=invalidptr=0 environment variable
before running your program to temporally disable the check.

But it's still better to identify where you stored a small integer (0x1)
in a Go's pointer field. It's probably some Windows structure used
by github.com/lxn/walk or github.com/lxn/win. If your code doesn't
use syscall/unsafe/cgo other than those packages.

@jerfly
Copy link
Author

jerfly commented Dec 17, 2014

my code have used a unsafe.Pointer,what do i do?

@bradfitz
Copy link
Contributor

The Go 1.4 release notes covers this in https://golang.org/doc/go1.4#runtime

Let's move discussion to the golang-nuts@ mailing list. The bug tracker is only for tracking active bugs.

@golang golang locked and limited conversation to collaborators Dec 17, 2014
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants