fluffle/goirc

State tracking is REALLY racey

Closed this issue · 4 comments

lucy commented

If I run a client with state tracking enabled and GOMAXPROCS > 1, I get a lot of messages like this:

2013/05/23 09:01:37 state_handlers.go:167: WARN irc.352(): received WHO reply for unknown nick luz

Using the new race detector with go run -race main.go <opts> shows lots of races:

==================
WARNING: DATA RACE
Read by goroutine 15:
  github.com/neeee/goirc/client.(*Conn).h_433()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/handlers.go:72 +0x1a6
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 14:
  github.com/neeee/goirc/state.(*stateTracker).ReNick()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:86 +0x154
  github.com/neeee/goirc/client.(*Conn).h_433()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/handlers.go:74 +0x29c
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 15 (running) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 14 (finished) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

==================
==================
WARNING: DATA RACE
Read by goroutine 15:
  runtime.mapaccess2_faststr()
      /usr/lib/go/src/pkg/runtime/hashmap.c:473 +0x0
  github.com/neeee/goirc/state.(*stateTracker).ReNick()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:84 +0x80
  github.com/neeee/goirc/client.(*Conn).h_433()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/handlers.go:74 +0x29c
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 14:
  runtime.mapdelete()
      /usr/lib/go/src/pkg/runtime/hashmap.c:1307 +0x0
  github.com/neeee/goirc/state.(*stateTracker).ReNick()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:87 +0x1c0
  github.com/neeee/goirc/client.(*Conn).h_433()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/handlers.go:74 +0x29c
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 15 (running) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 14 (finished) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

==================
==================
WARNING: DATA RACE
Write by goroutine 19:
  github.com/neeee/goirc/state.(*Nick).ParseModes()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/nick.go:106 +0x2ef
  github.com/neeee/goirc/client.(*Conn).h_MODE()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:113 +0x56b
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 18:
  github.com/neeee/goirc/state.(*Nick).ParseModes()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/nick.go:106 +0x2ef
  github.com/neeee/goirc/client.(*Conn).h_MODE()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:113 +0x56b
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 19 (running) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 18 (finished) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

==================
==================
WARNING: DATA RACE
Write by goroutine 20:
  runtime.mapassign1()
      /usr/lib/go/src/pkg/runtime/hashmap.c:1289 +0x0
  github.com/neeee/goirc/state.(*Nick).addChannel()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/nick.go:71 +0xe3
  github.com/neeee/goirc/state.(*stateTracker).Associate()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:214 +0x3cd
  github.com/neeee/goirc/client.(*Conn).h_JOIN()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:79 +0x590
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous read by goroutine 14:
  runtime.mapiterinit()
      /usr/lib/go/src/pkg/runtime/hashmap.c:1356 +0x0
  github.com/neeee/goirc/state.(*stateTracker).ReNick()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:89 +0x259
  github.com/neeee/goirc/client.(*Conn).h_433()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/handlers.go:74 +0x29c
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 20 (running) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 14 (finished) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

==================
==================
WARNING: DATA RACE
Read by goroutine 21:
  runtime.mapaccess2_faststr()
      /usr/lib/go/src/pkg/runtime/hashmap.c:473 +0x0
  github.com/neeee/goirc/state.(*stateTracker).GetChannel()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:148 +0x60
  github.com/neeee/goirc/client.(*Conn).h_353()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:193 +0xd7
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 20:
  runtime.mapassign1()
      /usr/lib/go/src/pkg/runtime/hashmap.c:1289 +0x0
  github.com/neeee/goirc/state.(*stateTracker).NewChannel()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:142 +0x315
  github.com/neeee/goirc/client.(*Conn).h_JOIN()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:61 +0x3ac
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (running) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 20 (finished) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

==================
==================
WARNING: DATA RACE
Read by goroutine 21:
  github.com/neeee/goirc/client.(*Conn).h_353()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:210 +0x35c
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 20:
  github.com/neeee/goirc/state.(*stateTracker).NewChannel()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:142 +0x1b2
  github.com/neeee/goirc/client.(*Conn).h_JOIN()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:61 +0x3ac
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (running) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 20 (finished) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

==================
==================
WARNING: DATA RACE
Read by goroutine 21:
  github.com/neeee/goirc/state.(*Channel).addNick()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/channel.go:121 +0x3b
  github.com/neeee/goirc/state.(*stateTracker).Associate()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:213 +0x3a2
  github.com/neeee/goirc/client.(*Conn).h_353()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:213 +0x3f1
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 20:
  github.com/neeee/goirc/state.(*stateTracker).NewChannel()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:142 +0x1fe
  github.com/neeee/goirc/client.(*Conn).h_JOIN()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:61 +0x3ac
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (running) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 20 (finished) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

==================
==================
WARNING: DATA RACE
Read by goroutine 21:
  runtime.mapaccess2_fast64()
      /usr/lib/go/src/pkg/runtime/hashmap.c:235 +0x0
  github.com/neeee/goirc/state.(*Channel).addNick()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/channel.go:121 +0x65
  github.com/neeee/goirc/state.(*stateTracker).Associate()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:213 +0x3a2
  github.com/neeee/goirc/client.(*Conn).h_353()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:213 +0x3f1
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 20:
  runtime.mapassign1()
      /usr/lib/go/src/pkg/runtime/hashmap.c:1289 +0x0
  github.com/neeee/goirc/state.(*Channel).addNick()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/channel.go:122 +0xe3
  github.com/neeee/goirc/state.(*stateTracker).Associate()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:213 +0x3a2
  github.com/neeee/goirc/client.(*Conn).h_JOIN()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:79 +0x590
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (running) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 20 (finished) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

==================
==================
WARNING: DATA RACE
Read by goroutine 21:
  github.com/neeee/goirc/state.(*Channel).addNick()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/channel.go:123 +0xfa
  github.com/neeee/goirc/state.(*stateTracker).Associate()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:213 +0x3a2
  github.com/neeee/goirc/client.(*Conn).h_353()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:213 +0x3f1
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 20:
  github.com/neeee/goirc/state.(*stateTracker).NewChannel()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:142 +0x1eb
  github.com/neeee/goirc/client.(*Conn).h_JOIN()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:61 +0x3ac
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (running) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 20 (finished) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

==================
==================
WARNING: DATA RACE
Write by goroutine 21:
  runtime.mapassign1()
      /usr/lib/go/src/pkg/runtime/hashmap.c:1289 +0x0
  github.com/neeee/goirc/state.(*Channel).addNick()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/channel.go:123 +0x141
  github.com/neeee/goirc/state.(*stateTracker).Associate()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:213 +0x3a2
  github.com/neeee/goirc/client.(*Conn).h_353()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:213 +0x3f1
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 20:
  runtime.mapassign1()
      /usr/lib/go/src/pkg/runtime/hashmap.c:1289 +0x0
  github.com/neeee/goirc/state.(*Channel).addNick()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/channel.go:123 +0x141
  github.com/neeee/goirc/state.(*stateTracker).Associate()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:213 +0x3a2
  github.com/neeee/goirc/client.(*Conn).h_JOIN()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:79 +0x590
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (running) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 20 (finished) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

==================
==================
WARNING: DATA RACE
Write by goroutine 25:
  github.com/neeee/goirc/client.(*Conn).h_352()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:173 +0x274
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 21:
  github.com/neeee/goirc/state.(*stateTracker).NewNick()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:69 +0x1cb
  github.com/neeee/goirc/client.(*Conn).h_353()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:208 +0x32d
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 25 (running) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (finished) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

==================
==================
WARNING: DATA RACE
Write by goroutine 25:
  github.com/neeee/goirc/client.(*Conn).h_352()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:174 +0x2fe
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 21:
  github.com/neeee/goirc/state.(*stateTracker).NewNick()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:69 +0x1de
  github.com/neeee/goirc/client.(*Conn).h_353()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:208 +0x32d
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 25 (running) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (finished) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

==================
==================
WARNING: DATA RACE
Write by goroutine 25:
  github.com/neeee/goirc/client.(*Conn).h_352()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:179 +0x465
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 21:
  github.com/neeee/goirc/state.(*stateTracker).NewNick()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:69 +0x1f1
  github.com/neeee/goirc/client.(*Conn).h_353()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:208 +0x32d
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 25 (running) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (finished) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

==================
==================
WARNING: DATA RACE
Read by goroutine 25:
  github.com/neeee/goirc/client.(*Conn).h_352()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:184 +0x638
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 21:
  github.com/neeee/goirc/state.(*stateTracker).NewNick()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:69 +0x204
  github.com/neeee/goirc/client.(*Conn).h_353()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:208 +0x32d
  github.com/neeee/goirc/client.HandlerFunc.Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
  github.com/neeee/goirc/client.(*hNode).Handle()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 25 (running) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (finished) created at:
  github.com/neeee/goirc/client.(*hSet).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
  github.com/neeee/goirc/client.(*Conn).dispatch()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
  github.com/neeee/goirc/client.(*Conn).runLoop()
      /home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
  gosched0()
      /usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

==================

Hi Lucy,

The short answer is: I know :-/

I had a good chat with github.com/kballard/ about this, he's written
something that should be safer. I have been meaning to get to fixing this
all up, but life (and, uh, minecraft) keep getting in the way.

Sorry!
--alex
On 23 May 2013 00:09, "Lucy" notifications@github.com wrote:

If I run a client with state tracking enabled and GOMAXPROCS > 1, I get a
lot of messages like this:

2013/05/23 09:01:37 state_handlers.go:167: WARN irc.352(): received WHO reply for unknown nick luz

Using the new race detector with go run -race main.go shows lots
of races:

WARNING: DATA RACE
Read by goroutine 15:
github.com/neeee/goirc/client.(_Conn).h_433()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/handlers.go:72 +0x1a6
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(_hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 14:
github.com/neeee/goirc/state.(_stateTracker).ReNick()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:86 +0x154
github.com/neeee/goirc/client.(_Conn).h_433()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/handlers.go:74 +0x29c
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 15 (running) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 14 (finished) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

WARNING: DATA RACE
Read by goroutine 15:
runtime.mapaccess2_faststr()
/usr/lib/go/src/pkg/runtime/hashmap.c:473 +0x0
github.com/neeee/goirc/state.(_stateTracker).ReNick()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:84 +0x80
github.com/neeee/goirc/client.(_Conn).h_433()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/handlers.go:74 +0x29c
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 14:
runtime.mapdelete()
/usr/lib/go/src/pkg/runtime/hashmap.c:1307 +0x0
github.com/neeee/goirc/state.(_stateTracker).ReNick()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:87 +0x1c0
github.com/neeee/goirc/client.(_Conn).h_433()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/handlers.go:74 +0x29c
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 15 (running) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 14 (finished) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

WARNING: DATA RACE
Write by goroutine 19:
github.com/neeee/goirc/state.(_Nick).ParseModes()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/nick.go:106 +0x2ef
github.com/neeee/goirc/client.(_Conn).h_MODE()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:113 +0x56b
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 18:
github.com/neeee/goirc/state.(_Nick).ParseModes()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/nick.go:106 +0x2ef
github.com/neeee/goirc/client.(_Conn).h_MODE()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:113 +0x56b
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 19 (running) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 18 (finished) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

WARNING: DATA RACE
Write by goroutine 20:
runtime.mapassign1()
/usr/lib/go/src/pkg/runtime/hashmap.c:1289 +0x0
github.com/neeee/goirc/state.(_Nick).addChannel()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/nick.go:71 +0xe3
github.com/neeee/goirc/state.(_stateTracker).Associate()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:214 +0x3cd
github.com/neeee/goirc/client.(_Conn).h_JOIN()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:79 +0x590
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(_hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous read by goroutine 14:
runtime.mapiterinit()
/usr/lib/go/src/pkg/runtime/hashmap.c:1356 +0x0
github.com/neeee/goirc/state.(_stateTracker).ReNick()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:89 +0x259
github.com/neeee/goirc/client.(_Conn).h_433()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/handlers.go:74 +0x29c
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 20 (running) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 14 (finished) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

WARNING: DATA RACE
Read by goroutine 21:
runtime.mapaccess2_faststr()
/usr/lib/go/src/pkg/runtime/hashmap.c:473 +0x0
github.com/neeee/goirc/state.(_stateTracker).GetChannel()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:148 +0x60
github.com/neeee/goirc/client.(_Conn).h_353()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:193 +0xd7
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 20:
runtime.mapassign1()
/usr/lib/go/src/pkg/runtime/hashmap.c:1289 +0x0
github.com/neeee/goirc/state.(_stateTracker).NewChannel()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:142 +0x315
github.com/neeee/goirc/client.(_Conn).h_JOIN()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:61 +0x3ac
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (running) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 20 (finished) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

WARNING: DATA RACE
Read by goroutine 21:
github.com/neeee/goirc/client.(_Conn).h_353()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:210 +0x35c
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(_hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 20:
github.com/neeee/goirc/state.(_stateTracker).NewChannel()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:142 +0x1b2
github.com/neeee/goirc/client.(_Conn).h_JOIN()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:61 +0x3ac
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (running) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 20 (finished) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

WARNING: DATA RACE
Read by goroutine 21:
github.com/neeee/goirc/state.(_Channel).addNick()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/channel.go:121 +0x3b
github.com/neeee/goirc/state.(_stateTracker).Associate()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:213 +0x3a2
github.com/neeee/goirc/client.(_Conn).h_353()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:213 +0x3f1
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(_hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 20:
github.com/neeee/goirc/state.(_stateTracker).NewChannel()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:142 +0x1fe
github.com/neeee/goirc/client.(_Conn).h_JOIN()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:61 +0x3ac
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (running) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 20 (finished) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

WARNING: DATA RACE
Read by goroutine 21:
runtime.mapaccess2_fast64()
/usr/lib/go/src/pkg/runtime/hashmap.c:235 +0x0
github.com/neeee/goirc/state.(_Channel).addNick()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/channel.go:121 +0x65
github.com/neeee/goirc/state.(_stateTracker).Associate()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:213 +0x3a2
github.com/neeee/goirc/client.(_Conn).h_353()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:213 +0x3f1
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(_hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 20:
runtime.mapassign1()
/usr/lib/go/src/pkg/runtime/hashmap.c:1289 +0x0
github.com/neeee/goirc/state.(_Channel).addNick()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/channel.go:122 +0xe3
github.com/neeee/goirc/state.(_stateTracker).Associate()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:213 +0x3a2
github.com/neeee/goirc/client.(_Conn).h_JOIN()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:79 +0x590
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(_hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (running) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 20 (finished) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

WARNING: DATA RACE
Read by goroutine 21:
github.com/neeee/goirc/state.(_Channel).addNick()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/channel.go:123 +0xfa
github.com/neeee/goirc/state.(_stateTracker).Associate()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:213 +0x3a2
github.com/neeee/goirc/client.(_Conn).h_353()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:213 +0x3f1
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(_hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 20:
github.com/neeee/goirc/state.(_stateTracker).NewChannel()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:142 +0x1eb
github.com/neeee/goirc/client.(_Conn).h_JOIN()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:61 +0x3ac
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (running) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 20 (finished) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

WARNING: DATA RACE
Write by goroutine 21:
runtime.mapassign1()
/usr/lib/go/src/pkg/runtime/hashmap.c:1289 +0x0
github.com/neeee/goirc/state.(_Channel).addNick()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/channel.go:123 +0x141
github.com/neeee/goirc/state.(_stateTracker).Associate()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:213 +0x3a2
github.com/neeee/goirc/client.(_Conn).h_353()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:213 +0x3f1
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(_hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 20:
runtime.mapassign1()
/usr/lib/go/src/pkg/runtime/hashmap.c:1289 +0x0
github.com/neeee/goirc/state.(_Channel).addNick()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/channel.go:123 +0x141
github.com/neeee/goirc/state.(_stateTracker).Associate()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:213 +0x3a2
github.com/neeee/goirc/client.(_Conn).h_JOIN()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:79 +0x590
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(_hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (running) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 20 (finished) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

WARNING: DATA RACE
Write by goroutine 25:
github.com/neeee/goirc/client.(_Conn).h_352()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:173 +0x274
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(_hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 21:
github.com/neeee/goirc/state.(_stateTracker).NewNick()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:69 +0x1cb
github.com/neeee/goirc/client.(_Conn).h_353()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:208 +0x32d
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 25 (running) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (finished) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

WARNING: DATA RACE
Write by goroutine 25:
github.com/neeee/goirc/client.(_Conn).h_352()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:174 +0x2fe
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(_hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 21:
github.com/neeee/goirc/state.(_stateTracker).NewNick()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:69 +0x1de
github.com/neeee/goirc/client.(_Conn).h_353()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:208 +0x32d
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 25 (running) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (finished) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

WARNING: DATA RACE
Write by goroutine 25:
github.com/neeee/goirc/client.(_Conn).h_352()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:179 +0x465
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(_hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 21:
github.com/neeee/goirc/state.(_stateTracker).NewNick()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:69 +0x1f1
github.com/neeee/goirc/client.(_Conn).h_353()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:208 +0x32d
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 25 (running) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (finished) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

WARNING: DATA RACE
Read by goroutine 25:
github.com/neeee/goirc/client.(_Conn).h_352()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:184 +0x638
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(_hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Previous write by goroutine 21:
github.com/neeee/goirc/state.(_stateTracker).NewNick()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/state/tracker.go:69 +0x204
github.com/neeee/goirc/client.(_Conn).h_353()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/state_handlers.go:208 +0x32d
github.com/neeee/goirc/client.HandlerFunc.Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:24 +0x41
github.com/neeee/goirc/client.(*hNode).Handle()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:52 +0xb6
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 25 (running) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f

Goroutine 21 (finished) created at:
github.com/neeee/goirc/client.(_hSet).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:125 +0x171
github.com/neeee/goirc/client.(_Conn).dispatch()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/dispatch.go:144 +0x58
github.com/neeee/goirc/client.(*Conn).runLoop()
/home/lucy/src/go/pkg/src/github.com/neeee/goirc/client/connection.go:298 +0x96
gosched0()
/usr/lib/go/src/pkg/runtime/proc.c:1224 +0x9f


Reply to this email directly or view it on GitHubhttps://github.com//issues/35
.

Hi Lucy,

I got some time to fix up a lot of the races. I doubt everything is completely fixed, since there's no locking or channel protection within goirc/state at all, but I'm still thinking about the way I want to change things (and still rather busy). PTAL at current master and let me know what you think?

lucy commented

I think it looks good so far. I'll start testing it in my bot.

Bah, can't fix multiple issues with comma-separated identifiers.