执行xorm.NewEngine时fatal error: concurrent map read and map write #678

Closed
opened 2017-08-07 02:47:09 +00:00 by t57root · 3 comments
t57root commented 2017-08-07 02:47:09 +00:00 (Migrated from github.com)

在执行db, err := xorm.NewEngine("sqlite3", "/path/to/db")时候 出现了如下错误,看起来应该不是我业务代码造成的

Call stack:
fatal error: concurrent map read and map write

goroutine 63 [running]:
runtime.throw(0xa3c7be, 0x21)
/usr/local/go/src/runtime/panic.go:596 +0x95 fp=0xc4201daa88 sp=0xc4201daa68
runtime.mapaccess2_faststr(0x99bf80, 0xc420011fb0, 0xa2af2b, 0x7, 0x416a88, 0x0)
/usr/local/go/src/runtime/hashmap_fast.go:326 +0x50a fp=0xc4201daae8 sp=0xc4201daa88
github.com/go-xorm/core.RegisterDriver(0xa2af2b, 0x7, 0xe91a40, 0xeda2d0)
/root/tools/src/github.com/go-xorm/core/driver.go:15 +0x65 fp=0xc4201dab60 sp=0xc4201daae8
github.com/go-xorm/xorm.regDrvsNDialects(0xc420386030)
/root/tools/src/github.com/go-xorm/xorm/xorm.go:42 +0x64d fp=0xc4201dac50 sp=0xc4201dab60
github.com/go-xorm/xorm.NewEngine(0xa2b35a, 0x7, 0xc420386000, 0x2c, 0x0, 0x0, 0x416a88)
/root/tools/src/github.com/go-xorm/xorm/xorm.go:56 +0x34 fp=0xc4201dad28 sp=0xc4201dac50

在执行`db, err := xorm.NewEngine("sqlite3", "/path/to/db")`时候 出现了如下错误,看起来应该不是我业务代码造成的 Call stack: fatal error: concurrent map read and map write goroutine 63 [running]: runtime.throw(0xa3c7be, 0x21) /usr/local/go/src/runtime/panic.go:596 +0x95 fp=0xc4201daa88 sp=0xc4201daa68 runtime.mapaccess2_faststr(0x99bf80, 0xc420011fb0, 0xa2af2b, 0x7, 0x416a88, 0x0) /usr/local/go/src/runtime/hashmap_fast.go:326 +0x50a fp=0xc4201daae8 sp=0xc4201daa88 github.com/go-xorm/core.RegisterDriver(0xa2af2b, 0x7, 0xe91a40, 0xeda2d0) /root/tools/src/github.com/go-xorm/core/driver.go:15 +0x65 fp=0xc4201dab60 sp=0xc4201daae8 github.com/go-xorm/xorm.regDrvsNDialects(0xc420386030) /root/tools/src/github.com/go-xorm/xorm/xorm.go:42 +0x64d fp=0xc4201dac50 sp=0xc4201dab60 github.com/go-xorm/xorm.NewEngine(0xa2b35a, 0x7, 0xc420386000, 0x2c, 0x0, 0x0, 0x416a88) /root/tools/src/github.com/go-xorm/xorm/xorm.go:56 +0x34 fp=0xc4201dad28 sp=0xc4201dac50

你是在运行过程中创建engine的?

你是在运行过程中创建engine的?
t57root commented 2017-08-07 02:52:53 +00:00 (Migrated from github.com)

不太确定“在运行过程中创建”是什么意思, 我这程序会同时访问多个sqlite数据库文件,每次我都是在每个goroutine里NewEngine 然后Close掉。之前没出现过这问题,最近加了一个新的goroutine,相同使用方法 就出现这个情况了

不太确定“在运行过程中创建”是什么意思, 我这程序会同时访问多个sqlite数据库文件,每次我都是在每个goroutine里NewEngine 然后Close掉。之前没出现过这问题,最近加了一个新的goroutine,相同使用方法 就出现这个情况了
t57root commented 2017-08-07 03:05:11 +00:00 (Migrated from github.com)

我着急想解决这个问题的话,是否是把Driver(core/driver.go)里面所有对drivers这变量的读写加读写锁就可以了? 只使用sqlite3Driver的情况下

我着急想解决这个问题的话,是否是把Driver(core/driver.go)里面所有对drivers这变量的读写加读写锁就可以了? 只使用sqlite3Driver的情况下
Sign in to join this conversation.
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: xorm/xorm#678
No description provided.