Skip to content
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

fatal error: concurrent map writes 崩溃 #51

Open
DaWei-GeGe opened this issue Nov 13, 2019 · 5 comments
Open

fatal error: concurrent map writes 崩溃 #51

DaWei-GeGe opened this issue Nov 13, 2019 · 5 comments

Comments

@DaWei-GeGe
Copy link

fatal error: concurrent map writes 导致崩溃

@LyricTian
Copy link
Owner

提供一下操作流程及崩溃栈信息吧

@venliong
Copy link

我也碰到这个问题了,以下是崩溃栈信息:

fatal error: concurrent map writes
fatal error: concurrent map writes

goroutine 60 [running]:
runtime.throw(0xede3e2, 0x15)
        c:/go/src/runtime/panic.go:774 +0x79 fp=0xc000422c58 sp=0xc000422c28 pc=0x434189
runtime.mapassign_faststr(0xddcc80, 0xc0003ea420, 0xece0ae, 0x1, 0xc0002b4b38)
        c:/go/src/runtime/map_faststr.go:291 +0x405 fp=0xc000422cc0 sp=0xc000422c58 pc=0x415515
github.com/casbin/casbin/v2.(*Enforcer).enforce(0xc0003c7ce0, 0x0, 0x0, 0xc0003de270, 0x3, 0x3, 0xd, 0x0, 0x1)
        <~>/Go//pkg/mod/github.com/casbin/casbin/v2@v2.1.0/enforcer.go:343 +0x1b2 fp=0xc000423020 sp=0xc000422cc0 pc=0x8d2142
github.com/casbin/casbin/v2.(*Enforcer).Enforce(...)
        <~>/Go//pkg/mod/github.com/casbin/casbin/v2@v2.1.0/enforcer.go:486
github.com/casbin/casbin/v2.(*SyncedEnforcer).Enforce(0xc0003e5da0, 0xc0003de270, 0x3, 0x3, 0xc0003bee00, 0x0, 0x0)
        <~>/Go//pkg/mod/github.com/casbin/casbin/v2@v2.1.0/enforcer_synced.go:111 +0xd7 fp=0xc0004230b0 sp=0xc000423020 pc=0x8d4817
go-mybase/internal/app/middleware.CasbinMiddleware.func1(0xc0003ce370)
        <Gin-Admin>/internal/app/middleware/mw_casbin.go:26 +0x1ea fp=0xc000423138 sp=0xc0004230b0 pc=0xbe938a
github.com/gin-gonic/gin.(*Context).Next(0xc0003ce370)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/context.go:124 +0x42 fp=0xc000423158 sp=0xc000423138 pc=0xbcbff2
go-mybase/internal/app/middleware.UserAuthMiddleware.func1(0xc0003ce370)
        <Gin-Admin>/internal/app/middleware/mw_auth.go:27 +0x561 fp=0xc000423630 sp=0xc000423158 pc=0xbe9131
github.com/gin-gonic/gin.(*Context).Next(0xc0003ce370)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/context.go:124 +0x42 fp=0xc000423650 sp=0xc000423630 pc=0xbcbff2
github.com/gin-contrib/gzip.Gzip.func2(0xc0003ce370)
        <~>/Go//pkg/mod/github.com/gin-contrib/gzip@v0.0.1/gzip.go:47 +0x24e fp=0xc000423720 sp=0xc000423650 pc=0xbdf1be
github.com/gin-gonic/gin.(*Context).Next(0xc0003ce370)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/context.go:124 +0x42 fp=0xc000423740 sp=0xc000423720 pc=0xbcbff2
go-mybase/internal/app/middleware.RecoveryMiddleware.func1(0xc0003ce370)
        <Gin-Admin>/internal/app/middleware/mw_recover.go:32 +0x62 fp=0xc000423790 sp=0xc000423740 pc=0xbeadc2
github.com/gin-gonic/gin.(*Context).Next(0xc0003ce370)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/context.go:124 +0x42 fp=0xc0004237b0 sp=0xc000423790 pc=0xbcbff2
go-mybase/internal/app/middleware.LoggerMiddleware.func1(0xc0003ce370)
        <Gin-Admin>/internal/app/middleware/mw_logger.go:53 +0x630 fp=0xc000423a78 sp=0xc0004237b0 pc=0xbe9b10
github.com/gin-gonic/gin.(*Context).Next(0xc0003ce370)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/context.go:124 +0x42 fp=0xc000423a98 sp=0xc000423a78 pc=0xbcbff2
go-mybase/internal/app/middleware.TraceMiddleware.func1(0xc0003ce370)
        <Gin-Admin>/internal/app/middleware/mw_trace.go:23 +0x11f fp=0xc000423ad8 sp=0xc000423a98 pc=0xbeaf0f
github.com/gin-gonic/gin.(*Context).Next(0xc0003ce370)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/context.go:124 +0x42 fp=0xc000423af8 sp=0xc000423ad8 pc=0xbcbff2
github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000144000, 0xc0003ce370)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/gin.go:389 +0x5b9 fp=0xc000423be0 sp=0xc000423af8 pc=0xbd59e9github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000144000, 0x10087c0, 0xc000150700, 0xc00013e100)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/gin.go:351 +0x13b fp=0xc000423c18 sp=0xc000423be0 pc=0xbd520bnet/http.serverHandler.ServeHTTP(0xc00017a000, 0x10087c0, 0xc000150700, 0xc00013e100)
        c:/go/src/net/http/server.go:2802 +0xab fp=0xc000423c48 sp=0xc000423c18 pc=0x6e02db
net/http.(*conn).serve(0xc0001600a0, 0x100ab00, 0xc0001301c0)
        c:/go/src/net/http/server.go:1890 +0x87c fp=0xc000423fc8 sp=0xc000423c48 pc=0x6dbaac
runtime.goexit()
        c:/go/src/runtime/asm_amd64.s:1357 +0x1 fp=0xc000423fd0 sp=0xc000423fc8 pc=0x462e91
created by net/http.(*Server).Serve
        c:/go/src/net/http/server.go:2927 +0x395

goroutine 1 [chan receive, 876 minutes]:
main.main()
        <Gin-Admin>/cmd/server/main.go:64 +0x440

goroutine 6 [syscall, 876 minutes]:
os/signal.signal_recv(0x0)
        c:/go/src/runtime/sigqueue.go:147 +0xa3
os/signal.loop()
        c:/go/src/os/signal/signal_unix.go:23 +0x29
created by os/signal.init.0
        c:/go/src/os/signal/signal_unix.go:29 +0x48

goroutine 34 [runnable]:
github.com/tidwall/buntdb.(*DB).backgroundManager(0xc000334000)
        <~>/Go//pkg/mod/github.com/tidwall/buntdb@v1.1.0/buntdb.go:548 +0xdb
created by github.com/tidwall/buntdb.Open
        <~>/Go//pkg/mod/github.com/tidwall/buntdb@v1.1.0/buntdb.go:171 +0x2c4

goroutine 35 [select, 876 minutes]:
database/sql.(*DB).connectionOpener(0xc0002fa0c0, 0x100ab00, 0xc0002ace80)
        c:/go/src/database/sql/sql.go:1052 +0xef
created by database/sql.OpenDB
        c:/go/src/database/sql/sql.go:722 +0x164

goroutine 36 [select, 876 minutes]:
database/sql.(*DB).connectionResetter(0xc0002fa0c0, 0x100ab00, 0xc0002ace80)
        c:/go/src/database/sql/sql.go:1065 +0x102
created by database/sql.OpenDB
        c:/go/src/database/sql/sql.go:723 +0x19a

goroutine 42 [IO wait]:
internal/poll.runtime_pollWait(0x1d90ee8, 0x72, 0xff8fc0)
        c:/go/src/runtime/netpoll.go:184 +0x5c
internal/poll.(*pollDesc).wait(0xc0001dc1c8, 0x72, 0xcaf500, 0x0, 0x0)
        c:/go/src/internal/poll/fd_poll_runtime.go:87 +0x4c
internal/poll.(*ioSrv).ExecIO(0x15cb698, 0xc0001dc018, 0xc0003304c0, 0x1, 0x0, 0x248)
        c:/go/src/internal/poll/fd_windows.go:228 +0x121
internal/poll.(*FD).acceptOne(0xc0001dc000, 0x248, 0xc00009e000, 0x2, 0x2, 0xc0001dc018, 0xc, 0x0, 0x0, 0xc00022dca4)
        c:/go/src/internal/poll/fd_windows.go:896 +0xa9
internal/poll.(*FD).Accept(0xc0001dc000, 0xc00022dcb8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        c:/go/src/internal/poll/fd_windows.go:930 +0x17a
net.(*netFD).accept(0xc0001dc000, 0xc00022dd50, 0x6e12ab, 0xc00017a0a0)
        c:/go/src/net/fd_windows.go:193 +0x7b
net.(*TCPListener).accept(0xc00011a620, 0x6e1255, 0x0, 0x499a6d)
        c:/go/src/net/tcpsock_posix.go:139 +0x39
net.(*TCPListener).Accept(0xc00011a620, 0xc00022dda0, 0x18, 0xc00033a300, 0x6e07b5)
        c:/go/src/net/tcpsock.go:261 +0x4e
net/http.(*Server).Serve(0xc00017a000, 0x1008540, 0xc00011a620, 0x0, 0x0)
        c:/go/src/net/http/server.go:2896 +0x28d
net/http.(*Server).ListenAndServe(0xc00017a000, 0xc00029e9f0, 0xef2a4a)
        c:/go/src/net/http/server.go:2825 +0xbe
go-mybase/internal/app.InitHTTPServer.func1(0x100abc0, 0xc00029e9f0, 0xc00011f380, 0xf, 0xc00017a000)
        <Gin-Admin>/internal/app/web.go:78 +0xbb
created by go-mybase/internal/app.InitHTTPServer
        <Gin-Admin>/internal/app/web.go:76 +0x209

goroutine 56 [select, 1 minutes]:
database/sql.(*DB).connectionCleaner(0xc0002fa0c0, 0x68c61714000)
        c:/go/src/database/sql/sql.go:950 +0x377
created by database/sql.(*DB).startCleanerLocked
        c:/go/src/database/sql/sql.go:937 +0xae

goroutine 12 [running]:
        goroutine running on other thread; stack unavailable
created by net/http.(*Server).Serve
        c:/go/src/net/http/server.go:2927 +0x395

goroutine 22 [chan receive]:
github.com/LyricTian/captcha/store.(*memoryStore).gc(0xc000131040)
        <~>/Go//pkg/mod/github.com/!lyric!tian/captcha@v0.0.0-20190614104510-11aff818cbf4/store/memory.go:39 +0x214
created by github.com/LyricTian/captcha/store.NewMemoryStore
        <~>/Go//pkg/mod/github.com/!lyric!tian/captcha@v0.0.0-20190614104510-11aff818cbf4/store/memory.go:18 +0xe8   

goroutine 13 [IO wait]:
internal/poll.runtime_pollWait(0x1d90d48, 0x72, 0xff8fc0)
        c:/go/src/runtime/netpoll.go:184 +0x5c
internal/poll.(*pollDesc).wait(0xc0001af0c8, 0x72, 0xcaf500, 0x0, 0x0)
        c:/go/src/internal/poll/fd_poll_runtime.go:87 +0x4c
internal/poll.(*ioSrv).ExecIO(0x15cb698, 0xc0001aef18, 0xf07350, 0xfddb60, 0x1869200, 0x4)
        c:/go/src/internal/poll/fd_windows.go:228 +0x121
internal/poll.(*FD).Read(0xc0001aef00, 0xc0003a6ac1, 0x1, 0x1, 0x0, 0x0, 0x0)
        c:/go/src/internal/poll/fd_windows.go:527 +0x31c
net.(*netFD).Read(0xc0001aef00, 0xc0003a6ac1, 0x1, 0x1, 0xc0002acd58, 0xc000343f68, 0x471e03)
        c:/go/src/net/fd_windows.go:152 +0x56
net.(*conn).Read(0xc000006368, 0xc0003a6ac1, 0x1, 0x1, 0x0, 0x0, 0x0)
        c:/go/src/net/net.go:184 +0x6f
net/http.(*connReader).backgroundRead(0xc0003a6ab0)
        c:/go/src/net/http/server.go:677 +0x5f
created by net/http.(*connReader).startBackgroundRead
        c:/go/src/net/http/server.go:673 +0xdb

goroutine 61 [IO wait]:
internal/poll.runtime_pollWait(0x1d90e18, 0x72, 0xff8fc0)
        c:/go/src/runtime/netpoll.go:184 +0x5c
internal/poll.(*pollDesc).wait(0xc000171ac8, 0x72, 0xcaf500, 0x0, 0x0)
        c:/go/src/internal/poll/fd_poll_runtime.go:87 +0x4c
internal/poll.(*ioSrv).ExecIO(0x15cb698, 0xc000171918, 0xf07350, 0x101000000000000, 0x10101, 0x0)
        c:/go/src/internal/poll/fd_windows.go:228 +0x121
internal/poll.(*FD).Read(0xc000171900, 0xc000378251, 0x1, 0x1, 0x0, 0x0, 0x0)
        c:/go/src/internal/poll/fd_windows.go:527 +0x31c
net.(*netFD).Read(0xc000171900, 0xc000378251, 0x1, 0x1, 0x10000010000, 0x0, 0x0)
        c:/go/src/net/fd_windows.go:152 +0x56
net.(*conn).Read(0xc000118018, 0xc000378251, 0x1, 0x1, 0x0, 0x0, 0x0)
        c:/go/src/net/net.go:184 +0x6f
net/http.(*connReader).backgroundRead(0xc000378240)
        c:/go/src/net/http/server.go:677 +0x5f
created by net/http.(*connReader).startBackgroundRead
        c:/go/src/net/http/server.go:673 +0xdb

goroutine 12 [running]:
runtime.throw(0xede3e2, 0x15)
        c:/go/src/runtime/panic.go:774 +0x79 fp=0xc000304c58 sp=0xc000304c28 pc=0x434189
runtime.mapassign_faststr(0xddcc80, 0xc0003ea420, 0xece0ae, 0x1, 0xc0002b4b38)
        c:/go/src/runtime/map_faststr.go:291 +0x405 fp=0xc000304cc0 sp=0xc000304c58 pc=0x415515
github.com/casbin/casbin/v2.(*Enforcer).enforce(0xc0003c7ce0, 0x0, 0x0, 0xc0003a6fc0, 0x3, 0x3, 0x12, 0x0, 0x1)
        <~>/Go//pkg/mod/github.com/casbin/casbin/v2@v2.1.0/enforcer.go:343 +0x1b2 fp=0xc000305020 sp=0xc000304cc0 pc=0x8d2142
github.com/casbin/casbin/v2.(*Enforcer).Enforce(...)
        <~>/Go//pkg/mod/github.com/casbin/casbin/v2@v2.1.0/enforcer.go:486
github.com/casbin/casbin/v2.(*SyncedEnforcer).Enforce(0xc0003e5da0, 0xc0003a6fc0, 0x3, 0x3, 0xc000154300, 0x0, 0x0)
        <~>/Go//pkg/mod/github.com/casbin/casbin/v2@v2.1.0/enforcer_synced.go:111 +0xd7 fp=0xc0003050b0 sp=0xc000305020 pc=0x8d4817
go-mybase/internal/app/middleware.CasbinMiddleware.func1(0xc0000ba370)
        <Gin-Admin>/internal/app/middleware/mw_casbin.go:26 +0x1ea fp=0xc000305138 sp=0xc0003050b0 pc=0xbe938a
github.com/gin-gonic/gin.(*Context).Next(0xc0000ba370)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/context.go:124 +0x42 fp=0xc000305158 sp=0xc000305138 pc=0xbcbff2
go-mybase/internal/app/middleware.UserAuthMiddleware.func1(0xc0000ba370)
        <Gin-Admin>/internal/app/middleware/mw_auth.go:27 +0x561 fp=0xc000305630 sp=0xc000305158 pc=0xbe9131
github.com/gin-gonic/gin.(*Context).Next(0xc0000ba370)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/context.go:124 +0x42 fp=0xc000305650 sp=0xc000305630 pc=0xbcbff2
github.com/gin-contrib/gzip.Gzip.func2(0xc0000ba370)
        <~>/Go//pkg/mod/github.com/gin-contrib/gzip@v0.0.1/gzip.go:47 +0x24e fp=0xc000305720 sp=0xc000305650 pc=0xbdf1be
github.com/gin-gonic/gin.(*Context).Next(0xc0000ba370)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/context.go:124 +0x42 fp=0xc000305740 sp=0xc000305720 pc=0xbcbff2
go-mybase/internal/app/middleware.RecoveryMiddleware.func1(0xc0000ba370)
        <Gin-Admin>/internal/app/middleware/mw_recover.go:32 +0x62 fp=0xc000305790 sp=0xc000305740 pc=0xbeadc2
github.com/gin-gonic/gin.(*Context).Next(0xc0000ba370)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/context.go:124 +0x42 fp=0xc0003057b0 sp=0xc000305790 pc=0xbcbff2
go-mybase/internal/app/middleware.LoggerMiddleware.func1(0xc0000ba370)
        <Gin-Admin>/internal/app/middleware/mw_logger.go:53 +0x630 fp=0xc000305a78 sp=0xc0003057b0 pc=0xbe9b10
github.com/gin-gonic/gin.(*Context).Next(0xc0000ba370)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/context.go:124 +0x42 fp=0xc000305a98 sp=0xc000305a78 pc=0xbcbff2
go-mybase/internal/app/middleware.TraceMiddleware.func1(0xc0000ba370)
        <Gin-Admin>/internal/app/middleware/mw_trace.go:23 +0x11f fp=0xc000305ad8 sp=0xc000305a98 pc=0xbeaf0f
github.com/gin-gonic/gin.(*Context).Next(0xc0000ba370)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/context.go:124 +0x42 fp=0xc000305af8 sp=0xc000305ad8 pc=0xbcbff2
github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000144000, 0xc0000ba370)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/gin.go:389 +0x5b9 fp=0xc000305be0 sp=0xc000305af8 pc=0xbd59e9github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000144000, 0x10087c0, 0xc00017a0e0, 0xc0002ae200)
        <~>/Go//pkg/mod/github.com/gin-gonic/gin@v1.4.0/gin.go:351 +0x13b fp=0xc000305c18 sp=0xc000305be0 pc=0xbd520bnet/http.serverHandler.ServeHTTP(0xc00017a000, 0x10087c0, 0xc00017a0e0, 0xc0002ae200)
        c:/go/src/net/http/server.go:2802 +0xab fp=0xc000305c48 sp=0xc000305c18 pc=0x6e02db
net/http.(*conn).serve(0xc00016a140, 0x100ab00, 0xc0001e8240)
        c:/go/src/net/http/server.go:1890 +0x87c fp=0xc000305fc8 sp=0xc000305c48 pc=0x6dbaac
runtime.goexit()
        c:/go/src/runtime/asm_amd64.s:1357 +0x1 fp=0xc000305fd0 sp=0xc000305fc8 pc=0x462e91
created by net/http.(*Server).Serve
        c:/go/src/net/http/server.go:2927 +0x395
exit status 2

@venliong
Copy link

应当是 casbin 的问题: casbin/casbin#323

@LyricTian
Copy link
Owner

已经修复,升级casbin版本至2.1.1

@venliong
Copy link

@LyricTian 👍

对于已有项目,更新一下casbin依赖就可以了:

go get -u  github.com/casbin/casbin/v2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants