I always get "concurrent map writes" error with the below description:
fatal error: concurrent map writes
goroutine 435 [running]:
runtime.throw(0x900720, 0x15)
/usr/local/go/src/runtime/panic.go:530 +0x90 fp=0xc8202d30c0 sp=0xc8202d30a8
runtime.mapassign1(0x770940, 0xc82000f9b0, 0xc8202d31c0, 0xc8202d31a0)
/usr/local/go/src/runtime/hashmap.go:445 +0xb1 fp=0xc8202d3168 sp=0xc8202d30c0
github.com/satyakb/go-socket%2eio-redis.broadcast.Join(0xc82000f590, 0x2d, 0xc820011520, 0x4, 0xc8200bca20, 0x13, 0x7f4e5119c0d0, 0xc82015e000, 0x7f4e5119c0d0, 0xc8200897c0, ...)
/data/go/dev/src/github.com/satyakb/go-socket.io-redis/redis.go:163 +0x20f fp=0xc8202d31e8 sp=0xc8202d3168
github.com/satyakb/go-socket%2eio-redis.(_broadcast).Join(0xc8200ebc30, 0xc82012e1c0, 0x7, 0x7f4e511e1578, 0xc82020efc0, 0x0, 0x0)
:7 +0xfb fp=0xc8202d32c8 sp=0xc8202d31e8
github.com/googollee/go-socket%2eio.(_socketHandler).Join(0xc8202146e0, 0xc82012e0c8, 0x6, 0x0, 0x0)
/data/go/dev/src/github.com/googollee/go-socket.io/handler.go:91 +0xf0 fp=0xc8202d3358 sp=0xc8202d32c8
main.main.func1.2(0xc8200c09a0, 0xab)
/data/go/dev/src/gochat/chatapp.go:398 +0x81b fp=0xc8202d35d0 sp=0xc8202d3358
runtime.call32(0xc820693640, 0xc820298b40, 0xc8205800f0, 0x1000000010)
/usr/local/go/src/runtime/asm_amd64.s:472 +0x3e fp=0xc8202d35f8 sp=0xc8202d35d0
reflect.Value.call(0x77cdc0, 0xc820298b40, 0x13, 0x8ac7a0, 0x4, 0xc82025c920, 0x1, 0x1, 0x0, 0x0, ...)
/usr/local/go/src/reflect/value.go:435 +0x120d fp=0xc8202d3948 sp=0xc8202d35f8
reflect.Value.Call(0x77cdc0, 0xc820298b40, 0x13, 0xc82025c920, 0x1, 0x1, 0x0, 0x0, 0x0)
/usr/local/go/src/reflect/value.go:303 +0xb1 fp=0xc8202d39a8 sp=0xc8202d3948
github.com/googollee/go-socket%2eio.(_caller).Call(0xc820298b80, 0x7f4e511e1578, 0xc82020efc0, 0xc82012e070, 0x1, 0x1, 0x0, 0x0, 0x0)
/data/go/dev/src/github.com/googollee/go-socket.io/caller.go:81 +0x6c3 fp=0xc8202d3b60 sp=0xc8202d39a8
github.com/googollee/go-socket%2eio.(_socketHandler).onPacket(0xc8202146e0, 0xc8202d3f30, 0xc8202d3ef8, 0x0, 0x0, 0x0, 0x0, 0x0)
/data/go/dev/src/github.com/googollee/go-socket.io/handler.go:165 +0x37a fp=0xc8202d3d30 sp=0xc8202d3b60
github.com/googollee/go-socket%2eio.(_socket).loop(0xc82020efc0, 0x0, 0x0)
/data/go/dev/src/github.com/googollee/go-socket.io/socket.go:135 +0x3d3 fp=0xc8202d3f78 sp=0xc8202d3d30
github.com/googollee/go-socket%2eio.(_Server).loop.func1(0xc82020efc0)
/data/go/dev/src/github.com/googollee/go-socket.io/server.go:103 +0x21 fp=0xc8202d3f98 sp=0xc8202d3f78
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:1998 +0x1 fp=0xc8202d3fa0 sp=0xc8202d3f98
created by github.com/googollee/go-socket%2eio.(*Server).loop
/data/go/dev/src/github.com/googollee/go-socket.io/server.go:104 +0xfc
goroutine 1 [IO wait]:
net.runtime_pollWait(0x7f4e511dcd80, 0x72, 0x0)
/usr/local/go/src/runtime/netpoll.go:160 +0x60
net.(_pollDesc).Wait(0xc82017a1b0, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:73 +0x3a
net.(_pollDesc).WaitRead(0xc82017a1b0, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:78 +0x36
net.(_netFD).accept(0xc82017a150, 0x0, 0x7f4e51220d58, 0xc8202066c0)
/usr/local/go/src/net/fd_unix.go:426 +0x27c
net.(_TCPListener).AcceptTCP(0xc820028098, 0x45cba0, 0x0, 0x0)
/usr/local/go/src/net/tcpsock_posix.go:254 +0x4d
net/http.tcpKeepAliveListener.Accept(0xc820028098, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:2427 +0x41
net/http.(_Server).Serve(0xc820084600, 0x7f4e51220d20, 0xc820028098, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:2117 +0x129
net/http.(_Server).ListenAndServe(0xc820084600, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:2098 +0x136
net/http.ListenAndServe(0xc8200115d0, 0x6, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:2195 +0x98
main.main()
/data/go/dev/src/gochat/chatapp.go:561 +0xbe9
goroutine 17 [syscall, locked to thread]:
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:1998 +0x1
goroutine 5 [chan receive]:
github.com/googollee/go-socket%2eio.(_Server).loop(0xc8200bcb40)
/data/go/dev/src/github.com/googollee/go-socket.io/server.go:97 +0x6d
created by github.com/googollee/go-socket%2eio.NewServer
/data/go/dev/src/github.com/googollee/go-socket.io/server.go:26 +0x421
goroutine 362 [select]:
github.com/googollee/go-engine%2eio.(_serverConn).pingLoop(0xc8201e61a0)
/data/go/dev/src/github.com/googollee/go-engine.io/server_conn.go:359 +0x42f
created by github.com/googollee/go-engine%2eio.newServerConn
/data/go/dev/src/github.com/googollee/go-engine.io/server_conn.go:110 +0x58e
I tried add lock(sync.RWMutex) for methods: Join/Leave/onmessage/Send, but still get the same error. Could someone give me some helps or ideas? Thanks.