changkun / occamy

🖥️ a modern remote desktop proxy written in Go

Home Page:https://github.com/changkun/occamy

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Panics under high pressure

changkun opened this issue · comments

Describe the bug
A cgo bug again. But not appear very often.

[Switching to Thread 0x7f7fc9bb2700 (LWP 11)]
0x00007f7fd40d9cc0 in pthread_mutex_lock () from /lib64/libpthread.so.0
Missing separate debuginfos, use: debuginfo-install bzip2-libs-1.0.6-13.el7.x86_64 cairo-1.15.12-4.el7.x86_64 expat-2.1.0-10.el7_3.x86_64 fontconfig-2.13.0-4.3.el7.x86_64 freerdp-libs-1.0.2-15.el7.x86_64 freetype-2.8-14.el7.x86_64 fribidi-1.0.2-1.el7.x86_64 glib2-2.56.1-5.el7.x86_64 glibc-2.17-292.el7.x86_64 gmp-6.0.0-15.el7.x86_64 gnutls-3.3.29-9.el7_6.x86_64 graphite2-1.3.10-1.el7_3.x86_64 harfbuzz-1.7.5-2.el7.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.15.1-37.el7_7.2.x86_64 libX11-1.6.7-2.el7.x86_64 libXau-1.0.8-2.1.el7.x86_64 libXext-1.3.3-3.el7.x86_64 libXrender-0.9.10-1.el7.x86_64 libcom_err-1.42.9-16.el7.x86_64 libffi-3.0.13-18.el7.x86_64 libgcc-4.8.5-39.el7.x86_64 libgcrypt-1.5.3-14.el7.x86_64 libglvnd-1.0.1-0.8.git5baa1e5.el7.x86_64 libglvnd-egl-1.0.1-0.8.git5baa1e5.el7.x86_64 libglvnd-glx-1.0.1-0.8.git5baa1e5.el7.x86_64 libgpg-error-1.12-3.el7.x86_64 libjpeg-turbo-1.2.90-8.el7.x86_64 libpng-1.5.13-7.el7_2.x86_64 libselinux-2.5-14.1.el7.x86_64 libssh2-1.8.0-3.el7.x86_64 libtasn1-4.10-1.el7.x86_64 libthai-0.1.14-9.el7.x86_64 libuuid-2.23.2-61.el7.x86_64 libvncserver-0.9.9-13.el7_6.x86_64 libwebp-0.3.0-7.el7.x86_64 libxcb-1.13-1.el7.x86_64 lzo-minilzo-2.06-8.el7.x86_64 nettle-2.7.1-8.el7.x86_64 openssl-libs-1.0.2k-19.el7.x86_64 p11-kit-0.23.5-3.el7.x86_64 pango-1.42.4-4.el7_7.x86_64 pcre-8.32-17.el7.x86_64 pixman-0.34.0-1.el7.x86_64 uuid-1.6.2-26.el7.x86_64 zlib-1.2.7-18.el7.x86_64
(gdb) bt
#0  0x00007f7fd40d9cc0 in pthread_mutex_lock () at /lib64/libpthread.so.0
#1  0x00007f7fc8049ac9 in guac_common_list_lock (list=<optimized out>) at list.c:75
#2  0x00007f7fc03a6658 in guac_rdp_svc_send_pipes (user=0x7f7f9c0029e0) at rdp_svc.c:78
#3  0x00007f7fc03a6a1b in guac_rdp_user_join_handler (user=0x7f7f9c0029e0, argc=<optimized out>, argv=<optimized out>) at user.c:85
#4  0x00007f7fd42f2e1d in guac_client_add_user (user=0x7f7f9c0029e0, argc=<optimized out>, argv=<optimized out>)
    at client.c:285
#5  0x00000000009f800e in _cgo_5063686ecc33_Cfunc_guac_client_add_user (v=0xc0004db4c8) at cgo-gcc-prolog:89
#6  0x0000000000460c70 in runtime.asmcgocall () at /usr/local/go/src/runtime/asm_amd64.s:655
#7  0x000000000043947d in runtime.park_m (gp=0xc00055a600) at /usr/local/go/src/runtime/proc.go:2610
#8  0x000000c0002b1080 in  ()
#9  0x000000c00055a600 in  ()
#10 0x0000000000000000 in  ()

A stack trace:

occamy    | occamy-lib[140186717513472]: User is not responding.
occamy    | time="2019-11-07T09:55:13Z" level=info msg="User @13f96c22-fd5d-4625-b80e-187143d1174d disconnected (0 users remain)"
occamy    | occamy-lib[140185997338368]: Loading keymap "base"
occamy    | occamy-lib[140185997338368]: Loading keymap "en-us-qwerty"
occamy    | fatal error: unexpected signal during runtime execution
occamy    | [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x7f7fd40d9cc0]
occamy    |
occamy    | runtime stack:
occamy    | runtime.throw(0xb8c680, 0x2a)
occamy    |     /usr/local/go/src/runtime/panic.go:774 +0x72
occamy    | runtime.sigpanic()
occamy    |     /usr/local/go/src/runtime/signal_unix.go:378 +0x47c
occamy    |
occamy    | goroutine 206 [syscall, 3 minutes]:
occamy    | runtime.cgocall(0x9f7ff0, 0xc0004db4c8, 0x9c0048f0)
occamy    |     /usr/local/go/src/runtime/cgocall.go:128 +0x5b fp=0xc0004db498 sp=0xc0004db460 pc=0x40556b
occamy    | github.com/changkun/occamy/lib._Cfunc_guac_client_add_user(0x7f7f9c0029e0, 0x7f7f00000030, 0x7f7f9c0048f0, 0x0)
occamy    |     _cgo_gotypes.go:312 +0x4d fp=0xc0004db4c8 sp=0xc0004db498 pc=0x9f029d
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection.func5(0xc00006cb40, 0xc0005ee300, 0x30, 0x30, 0x7f7f9c0048f0, 0xc00006cb40)
occamy    |     /go/src/github.com/changkun/occamy/lib/user.go:150 +0xa0 fp=0xc0004db508 sp=0xc0004db4c8 pc=0x9f27c0
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection(0xc00006cb40, 0x0, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/lib/user.go:150 +0x4ea fp=0xc0004db648 sp=0xc0004db508 pc=0x9f1cda
occamy    | github.com/changkun/occamy/server.(*Session).Join.func1(0xc00046a450, 0x47, 0x0, 0xc00029e080)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:88 +0x2ed fp=0xc0004db7c0 sp=0xc0004db648 pc=0x9f732d
occamy    | runtime.goexit()
occamy    |     /usr/local/go/src/runtime/asm_amd64.s:1357 +0x1 fp=0xc0004db7c8 sp=0xc0004db7c0 pc=0x4614f1
occamy    | created by github.com/changkun/occamy/server.(*Session).Join
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:65 +0x14c
occamy    |
occamy    | goroutine 1 [IO wait, 3 minutes, locked to thread]:
occamy    | internal/poll.runtime_pollWait(0x7f7fd4623ed8, 0x72, 0x0)
occamy    |     /usr/local/go/src/runtime/netpoll.go:184 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc0000e6318, 0x72, 0x0, 0x0, 0xb75faf)
occamy    |     /usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy    | internal/poll.(*pollDesc).waitRead(...)
occamy    |     /usr/local/go/src/internal/poll/fd_poll_runtime.go:92
occamy    | internal/poll.(*FD).Accept(0xc0000e6300, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/internal/poll/fd_unix.go:384 +0x1f8
occamy    | net.(*netFD).accept(0xc0000e6300, 0xc0001c7c70, 0x6d9654, 0xc000216180)
occamy    |     /usr/local/go/src/net/fd_unix.go:238 +0x42
occamy    | net.(*TCPListener).accept(0xc0001b4700, 0x5dc3e93b, 0xc0001c7c70, 0x484cb6)
occamy    |     /usr/local/go/src/net/tcpsock_posix.go:139 +0x32
occamy    | net.(*TCPListener).Accept(0xc0001b4700, 0xc0001c7cc0, 0x18, 0xc000000180, 0x6d8b6e)
occamy    |     /usr/local/go/src/net/tcpsock.go:261 +0x47
occamy    | net/http.(*Server).Serve(0xc0002160e0, 0xc86980, 0xc0001b4700, 0x0, 0x0)
occamy    |     /usr/local/go/src/net/http/server.go:2896 +0x286
occamy    | net/http.(*Server).ListenAndServe(0xc0002160e0, 0x4, 0xb89f25)
occamy    |     /usr/local/go/src/net/http/server.go:2825 +0xb7
occamy    | github.com/changkun/occamy/server.(*proxy).serve(0xc0001b4360)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:67 +0x1ec
occamy    | github.com/changkun/occamy/server.Run(...)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:39
occamy    | main.main()
occamy    |     /go/src/github.com/changkun/occamy/occamy.go:18 +0xf0
occamy    |
occamy    | goroutine 7 [syscall, 3 minutes]:
occamy    | os/signal.signal_recv(0x0)
occamy    |     /usr/local/go/src/runtime/sigqueue.go:147 +0x9c
occamy    | os/signal.loop()
occamy    |     /usr/local/go/src/os/signal/signal_unix.go:23 +0x22
occamy    | created by os/signal.init.0
occamy    |     /usr/local/go/src/os/signal/signal_unix.go:29 +0x41
occamy    |
occamy    | goroutine 18 [chan receive, 3 minutes]:
occamy    | github.com/changkun/occamy/server.(*proxy).serve.func1(0xc0002160e0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:58 +0xe0
occamy    | created by github.com/changkun/occamy/server.(*proxy).serve
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:55 +0x14f
occamy    |
occamy    | goroutine 279 [runnable]:
occamy    | bytes.makeSlice.func1()
occamy    |     /usr/local/go/src/bytes/buffer.go:224 +0x68
occamy    | bytes.makeSlice(0x600, 0xc00045c000, 0x600, 0x600)
occamy    |     /usr/local/go/src/bytes/buffer.go:229 +0x94
occamy    | bytes.(*Buffer).grow(0xc000576ed8, 0x200, 0x200)
occamy    |     /usr/local/go/src/bytes/buffer.go:142 +0x15b
occamy    | bytes.(*Buffer).ReadFrom(0xc000576ed8, 0x7f7fc8002138, 0xc00048e050, 0xaa3de0, 0xa9d720, 0x0)
occamy    |     /usr/local/go/src/bytes/buffer.go:202 +0x4b
occamy    | io/ioutil.readAll(0x7f7fc8002138, 0xc00048e050, 0x200, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/io/ioutil/ioutil.go:36 +0x100
occamy    | io/ioutil.ReadAll(...)
occamy    |     /usr/local/go/src/io/ioutil/ioutil.go:45
occamy    | github.com/gorilla/websocket.(*Conn).ReadMessage(0xc000277b80, 0x6ce183, 0xc00029e6c0, 0xc78b01, 0xc0002beaa0, 0x7f7fd46240f8, 0x439956)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gorilla/websocket/conn.go:1032 +0x9a
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func2(0xc00031e360, 0xc0000e23d0, 0xc0001b4900, 0xc000277b80)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:141 +0x37
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:138 +0xfb
occamy    |
occamy    | goroutine 284 [IO wait, 3 minutes]:
occamy    | internal/poll.runtime_pollWait(0x7f7fd466bd68, 0x72, 0xffffffffffffffff)
occamy    |     /usr/local/go/src/runtime/netpoll.go:184 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc0002f5998, 0x72, 0x2000, 0x2000, 0xffffffffffffffff)
occamy    |     /usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy    | internal/poll.(*pollDesc).waitRead(...)
occamy    |     /usr/local/go/src/internal/poll/fd_poll_runtime.go:92
occamy    | internal/poll.(*FD).Read(0xc0002f5980, 0xc000198000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/internal/poll/fd_unix.go:169 +0x1cf
occamy    | net.(*netFD).Read(0xc0002f5980, 0xc000198000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc0000107c8, 0xc000198000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/net/net.go:184 +0x68
occamy    | bufio.(*Reader).fill(0xc0003e05a0)
occamy    |     /usr/local/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).Peek(0xc0003e05a0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/bufio/bufio.go:138 +0x4f
occamy    | github.com/gorilla/websocket.(*Conn).read(0xc0005518c0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gorilla/websocket/conn.go:357 +0x40
occamy    | github.com/gorilla/websocket.(*Conn).advanceFrame(0xc0005518c0, 0x0, 0x0, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gorilla/websocket/conn.go:787 +0x5c
occamy    | github.com/gorilla/websocket.(*Conn).NextReader(0xc0005518c0, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gorilla/websocket/conn.go:947 +0xa0
occamy    | github.com/gorilla/websocket.(*Conn).ReadMessage(0xc0005518c0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gorilla/websocket/conn.go:1028 +0x2f
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func2(0xc00031efc0, 0xc0000e2710, 0xc0001b4ce0, 0xc0005518c0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:141 +0x37
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:138 +0xfb
occamy    |
occamy    | goroutine 31 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000319340, 0xc00025bb00, 0x8, 0xc000275f18)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000418000)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000418000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000418000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000418000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000418000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000418000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00026d180, 0xc00025f300)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00026d180, 0xc00025f300)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8460, 0xc88640, 0xc00025ba00)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 283 [syscall, 3 minutes]:
occamy    | syscall.Syscall(0x0, 0x50, 0xc00043e000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/syscall/asm_linux_amd64.s:18 +0x5
occamy    | syscall.read(0x50, 0xc00043e000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/syscall/zsyscall_linux_amd64.go:732 +0x5a
occamy    | syscall.Read(...)
occamy    |     /usr/local/go/src/syscall/syscall_unix.go:183
occamy    | github.com/changkun/occamy/protocol.IO.Read(0x50, 0xc00043e000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/protocol/io.go:21 +0x49
occamy    | bufio.(*Reader).fill(0xc00031ef60)
occamy    |     /usr/local/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).ReadSlice(0xc00031ef60, 0x3b, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/bufio/bufio.go:359 +0x3d
occamy    | bufio.(*Reader).ReadBytes(0xc00031ef60, 0x3b, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/bufio/bufio.go:437 +0x73
occamy    | github.com/changkun/occamy/protocol.(*InstructionIO).ReadRaw(...)
occamy    |     /go/src/github.com/changkun/occamy/protocol/instruction.go:148
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func1(0xc00031efc0, 0xc0000e2710, 0xc0001b4ce0, 0xc0005518c0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:126 +0x41
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:123 +0xb8
occamy    |
occamy    | goroutine 278 [syscall, 3 minutes]:
occamy    | syscall.Syscall(0x0, 0x45, 0xc000212000, 0x2000, 0xc0004064d0, 0xc68152, 0xb9e201)
occamy    |     /usr/local/go/src/syscall/asm_linux_amd64.s:18 +0x5
occamy    | syscall.read(0x45, 0xc000212000, 0x2000, 0x2000, 0xc000277b80, 0xc0004a200c, 0x26)
occamy    |     /usr/local/go/src/syscall/zsyscall_linux_amd64.go:732 +0x5a
occamy    | syscall.Read(...)
occamy    |     /usr/local/go/src/syscall/syscall_unix.go:183
occamy    | github.com/changkun/occamy/protocol.IO.Read(0x45, 0xc000212000, 0x2000, 0x2000, 0xc000353da0, 0x9e3207, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/protocol/io.go:21 +0x49
occamy    | bufio.(*Reader).fill(0xc00031e300)
occamy    |     /usr/local/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).ReadSlice(0xc00031e300, 0xc00021203b, 0x24, 0xc000277b80, 0xc000353f58, 0x9e54dc, 0xc000353f28)
occamy    |     /usr/local/go/src/bufio/bufio.go:359 +0x3d
occamy    | bufio.(*Reader).ReadBytes(0xc00031e300, 0x3b, 0xc0002b42d0, 0x24, 0x24, 0x0, 0x0)
occamy    |     /usr/local/go/src/bufio/bufio.go:437 +0x73
occamy    | github.com/changkun/occamy/protocol.(*InstructionIO).ReadRaw(...)
occamy    |     /go/src/github.com/changkun/occamy/protocol/instruction.go:148
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func1(0xc00031e360, 0xc0000e23d0, 0xc0001b4900, 0xc000277b80)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:126 +0x41
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:123 +0xb8
occamy    |
occamy    | goroutine 213 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0005ba9a0, 0xc000536440, 0x8, 0xc000430638)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0003280b0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0003280b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0003280b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0003280b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0003280b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0003280b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0003280b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0003280b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0003280b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0003280b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000414000, 0xc000534600)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000414000, 0xc000534600)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef2c0, 0xc88640, 0xc000370c00)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 214 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000277a20, 0xc00029e940, 0x8, 0xc0001ff2d8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc00037edc0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037edc0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc00037edc0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00037edc0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037edc0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00037edc0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037edc0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00037edc0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037edc0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc00037edc0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000216700, 0xc00025e300)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000216700, 0xc00025e300)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef360, 0xc88640, 0xc000370c40)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 282 [syscall, 3 minutes]:
occamy    | github.com/changkun/occamy/lib._Cfunc_guac_user_input_thread(0x7f7f940029a0, 0x7f7f00e4e1c0)
occamy    |     _cgo_gotypes.go:482 +0x41
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection.func6(0xc00031f080)
occamy    |     /go/src/github.com/changkun/occamy/lib/user.go:154 +0x66
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection(0xc00031f080, 0x0, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/lib/user.go:154 +0x65f
occamy    | github.com/changkun/occamy/server.(*Session).Join.func1(0xc00046a450, 0x4f, 0x1, 0xc000580500)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:88 +0x2ed
occamy    | created by github.com/changkun/occamy/server.(*Session).Join
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:65 +0x14c
occamy    |
occamy    | goroutine 210 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00053c580, 0xc000580140, 0x8, 0xc00053a678)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc00037e160)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc00037e160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00037e160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00037e160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00037e160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc00037e160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00037a700, 0xc0003c5a00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00037a700, 0xc0003c5a00)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef0e0, 0xc88640, 0xc000370a80)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 240 [syscall, 3 minutes]:
occamy    | syscall.Syscall(0x0, 0x4c, 0xc000444000, 0x2000, 0xc0000685b0, 0xc68152, 0xb9e201)
occamy    |     /usr/local/go/src/syscall/asm_linux_amd64.s:18 +0x5
occamy    | syscall.read(0x4c, 0xc000444000, 0x2000, 0x2000, 0xc0000bb4a0, 0xc00001450c, 0x2a)
occamy    |     /usr/local/go/src/syscall/zsyscall_linux_amd64.go:732 +0x5a
occamy    | syscall.Read(...)
occamy    |     /usr/local/go/src/syscall/syscall_unix.go:183
occamy    | github.com/changkun/occamy/protocol.IO.Read(0x4c, 0xc000444000, 0x2000, 0x2000, 0xc00049cda0, 0x9e3207, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/protocol/io.go:21 +0x49
occamy    | bufio.(*Reader).fill(0xc00039a3c0)
occamy    |     /usr/local/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).ReadSlice(0xc00039a3c0, 0xc00044413b, 0x28, 0xc0000bb4a0, 0xc00049cf58, 0x9e54dc, 0xc00049cf28)
occamy    |     /usr/local/go/src/bufio/bufio.go:359 +0x3d
occamy    | bufio.(*Reader).ReadBytes(0xc00039a3c0, 0x3b, 0xc000338690, 0x28, 0x28, 0x0, 0x0)
occamy    |     /usr/local/go/src/bufio/bufio.go:437 +0x73
occamy    | github.com/changkun/occamy/protocol.(*InstructionIO).ReadRaw(...)
occamy    |     /go/src/github.com/changkun/occamy/protocol/instruction.go:148
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func1(0xc00039a420, 0xc00036a170, 0xc00036e2e0, 0xc0000bb4a0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:126 +0x41
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:123 +0xb8
occamy    |
occamy    | goroutine 97 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000550420, 0xc000580100, 0x8, 0xc000512538)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc00037e000)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc00037e000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00037e000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00037e000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00037e000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc00037e000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00037a620, 0xc0003c5900)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00037a620, 0xc0003c5900)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef040, 0xc88640, 0xc0003709c0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 30 [chan receive, 3 minutes, locked to thread]:
occamy    | github.com/changkun/occamy/server.(*Session).serveIO(0xc00046a750, 0xc0001b4900, 0xc000277b80, 0x26, 0x1)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:153 +0x11b
occamy    | github.com/changkun/occamy/server.(*Session).Join(0xc00046a750, 0xc000277b80, 0xc00029ec80, 0x1, 0x0, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:99 +0x1bd
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000277b80, 0xc00029ec80, 0x8, 0xc00031d198)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:217 +0x2dd
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000270000)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000270000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000270000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000270000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000270000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000270000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc0004148c0, 0xc0002ade00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc0004148c0, 0xc0002ade00)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d83c0, 0xc88640, 0xc00029eb80)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 249 [syscall, 3 minutes]:
occamy    | github.com/changkun/occamy/lib._Cfunc_guac_client_add_user(0x7f7fa00029e0, 0x7f7f00000014, 0x7f7fa0002b90, 0x0)
occamy    |     _cgo_gotypes.go:312 +0x4d
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection.func5(0xc0002f8540, 0xc0001da000, 0x14, 0x14, 0x7f7fa0002b90, 0xc0002f8540)
occamy    |     /go/src/github.com/changkun/occamy/lib/user.go:150 +0xa0
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection(0xc0002f8540, 0x0, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/lib/user.go:150 +0x4ea
occamy    | github.com/changkun/occamy/server.(*Session).Join.func1(0xc00046a750, 0x4b, 0x0, 0xc0001a4bc0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:88 +0x2ed
occamy    | created by github.com/changkun/occamy/server.(*Session).Join
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:65 +0x14c
occamy    |
occamy    | goroutine 212 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0000ba160, 0xc0001a5900, 0x8, 0xc00055e638)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc00037e2c0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e2c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc00037e2c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00037e2c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e2c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00037e2c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e2c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00037e2c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e2c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc00037e2c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00037a7e0, 0xc0000d7600)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00037a7e0, 0xc0000d7600)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef220, 0xc88640, 0xc000370bc0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 211 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000457a20, 0xc0001a5740, 0x8, 0xc0005832d8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0000b06e0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(occamy-lib[140185997338368]: Failed to load guacdr plugin. Drive redirection and printing will not work. Sound MAY not work.
occamy    | 0xc0000b06e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0000b06e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0000b06e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b06e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0000b06e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b06e0occamy-lib[140185997338368]: Failed to load guacsnd alongside guacdr plugin. Sound will not work. Drive redirection and printing MAY not work.
occamy    | )
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0000b06e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b06e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0000b06e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00047a7e0, 0xc0000d6300)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00047a7e0, 0xc0000d6300)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef180, 0xc88640, 0xc000370b80)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 215 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0003182c0, 0xc0002f6780, 0x8, 0xc00055fcc8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc00037e8f0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e8f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc00037e8f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00037e8f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e8f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00037e8f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e8f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00037e8f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e8f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc00037e8f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000216460, 0xc0002ac000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000216460, 0xc0002ac000)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef400, 0xc88640, 0xc0001a5440)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 32 [chan receive, 3 minutes]:
occamy    | github.com/changkun/occamy/server.(*Session).serveIO(0xc00046a750, 0xc00036e2e0, 0xc0000bb4a0, 0x4b, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:153 +0x11b
occamy    | github.com/changkun/occamy/server.(*Session).Join(0xc00046a750, 0xc0000bb4a0, 0xc0001a4bc0, 0x0, 0x0, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:99 +0x1bd
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0000bb4a0, 0xc0001a4bc0, 0x8, 0xc0000a5708)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:204 +0xe2
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0002700b0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002700b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0002700b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0002700b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002700b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0002700b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002700b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0002700b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002700b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0002700b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00047a0e0, 0xc0000d6900)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00047a0e0, 0xc0000d6900)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8500, 0xc88640, 0xc0001a4ac0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 33 [runnable, locked to thread]:
occamy    | github.com/changkun/occamy/lib._Cfunc_guac_client_load_plugin(0x7f7fbc000b80, 0x7f7fbc0008c0, 0x0)
occamy    |     _cgo_gotypes.go:352 +0x4d
occamy    | github.com/changkun/occamy/lib.(*Client).LoadProtocolPlugin.func2(0xc00010c5c0, 0x7f7fbc0008c0, 0x7f7fbc0008c0)
occamy    |     /go/src/github.com/changkun/occamy/lib/client.go:115 +0x68
occamy    | github.com/changkun/occamy/lib.(*Client).LoadProtocolPlugin(0xc00010c5c0, 0xc0002f2888, 0x3, 0x0, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/lib/client.go:115 +0x9d
occamy    | github.com/changkun/occamy/server.(*Session).initialize(0xc0004788d0, 0xc0002f2888, 0x3, 0xa5cba0, 0xc00010c5a0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:104 +0x72
occamy    | github.com/changkun/occamy/server.NewSession(0xc0002f2888, 0x3, 0xc0000fe6e0, 0x20, 0x12cd4a0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:40 +0x119
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000476c60, 0xc0002f7380, 0x8, 0xc000469f38)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:208 +0x141
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000328160)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000328160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000328160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000328160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000328160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000328160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000324b60, 0xc000300d00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000324b60, 0xc000300d00)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d85a0, 0xc88640, 0xc0002f7280)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 162 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0000bba20, 0xc0001a4d00, 0x8, 0xc0000a5bb8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0000b04d0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b04d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0000b04d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0000b04d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b04d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0000b04d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b04d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0000b04d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b04d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0000b04d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00047a1c0, 0xc0000d6a00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00047a1c0, 0xc0000d6a00)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8640, 0xc88640, 0xc0001a4c00)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 163 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00050f600, 0xc000370c80, 0x8, 0xc000512428)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0003282c0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0003282c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0003282c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0003282c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0003282c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0003282c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0003282c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0003282c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0003282c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0003282c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000324c40, 0xc000300e00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000324c40, 0xc000300e00)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d86e0, 0xc88640, 0xc0002f73c0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 164 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0004766e0, 0xc0002f7240, 0x8, 0xc000469aa8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000328000)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000328000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000328000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000328000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000328000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000328000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000324a80, 0xc000300c00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000324a80, 0xc000300c00)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8780, 0xc88640, 0xc0002f7140)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 165 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0003a1b80, 0xc0001b7c00, 0x8, 0xc000361bb8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0002040b0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002040b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0002040b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0002040b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002040b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0002040b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002040b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0002040b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002040b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0002040b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000216a80, 0xc0001bb600)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000216a80, 0xc0001bb600)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8820, 0xc88640, 0xc0001b7b00)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 166 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00050e160, 0xc0001b7d40, 0x8, 0xc0005100c8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000204210)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000204210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000204210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000204210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000204210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000204210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000216b60, 0xc0001bb700)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000216b60, 0xc0001bb700)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d88c0, 0xc88640, 0xc0001b7c40)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 167 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00050e6e0, 0xc0001b7e80, 0x8, 0xc000510528)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000204370)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000204370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000204370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000204370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000204370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000204370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000216c40, 0xc0001bb800)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000216c40, 0xc0001bb800)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8960, 0xc88640, 0xc0001b7d80)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 168 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00050f4a0, 0xc0005362c0, 0x8, 0xc000510988)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0002044d0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002044d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0002044d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0002044d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002044d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0002044d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002044d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0002044d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002044d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0002044d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000216d20, 0xc0001bb900)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000216d20, 0xc0001bb900)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8a00, 0xc88640, 0xc0001b7ec0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 169 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00053cdc0, 0xc0001a5500, 0x8, 0xc000431198)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0002706e0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002706e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0002706e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0002706e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002706e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0002706e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002706e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0002706e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002706e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0002706e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00026d5e0, 0xc0001bba00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00026d5e0, 0xc0001bba00)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8aa0, 0xc88640, 0xc0001b7fc0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 170 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000318580, 0xc0002f6880, 0x8, 0xc000511ca8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000418160)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000418160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000418160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000418160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000418160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000418160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc0004149a0, 0xc000534100)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc0004149a0, 0xc000534100)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8b40, 0xc88640, 0xc00029ed00)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 171 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000318160, 0xc0002f6740, 0x8, 0xc0000a53e8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000328580)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000328580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000328580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000328580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000328580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000328580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000324e00, 0xc000301000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000324e00, 0xc000301000)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8be0, 0xc88640, 0xc0002f75c0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 172 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00053ef20, 0xc00029e200, 0x8, 0xc000512e08)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0003286e0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0003286e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0003286e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0003286e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0003286e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0003286e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0003286e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0003286e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0003286e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0003286e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000324ee0, 0xc000301100)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000324ee0, 0xc000301100)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8c80, 0xc88640, 0xc0002f7680)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 173 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00050eb00, 0xc0002f61c0, 0x8, 0xc000510788)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0004180b0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004180b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0004180b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0004180b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004180b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0004180b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004180b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0004180b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004180b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0004180b0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00037a000, 0xc0003c4000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00037a000, 0xc0003c4000)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8d20, 0xc88640, 0xc00025bf80)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 174 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000456420, 0xc0001a4a40, 0x8, 0xc0005829b8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0000b02c0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b02c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0000b02c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0000b02c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b02c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0000b02c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b02c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0000b02c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b02c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0000b02c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00047a000, 0xc0000d6100)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00047a000, 0xc0000d6100)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8dc0, 0xc88640, 0xc000580000)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 175 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00053c420, 0xc000370000, 0x8, 0xc000512898)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000328420)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000328420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000328420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000328420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000328420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000328420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000324d20, 0xc000300f00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000324d20, 0xc000300f00)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8e60, 0xc88640, 0xc0002f7480)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 176 [chan receive, 3 minutes]:
occamy    | github.com/changkun/occamy/server.(*Session).serveIO(0xc00046a450, 0xc0004c47c0, 0xc00053e580, 0x47, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:153 +0x11b
occamy    | github.com/changkun/occamy/server.(*Session).Join(0xc00046a450, 0xc00053e580, 0xc00029e080, 0x0, 0x0, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:99 +0x1bd
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00053e580, 0xc00029e080, 0x8, 0xc00055eaa8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:204 +0xe2
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0004182c0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004182c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0004182c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0004182c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004182c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0004182c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004182c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0004182c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004182c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0004182c0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000414a80, 0xc000534200)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000414a80, 0xc000534200)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8f00, 0xc88640, 0xc00029edc0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 177 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0002766e0, 0xc00029e5c0, 0x8, 0xc00031d718)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000418370)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000418370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000418370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000418370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000418370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000418370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000414b60, 0xc000534300)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000414b60, 0xc000534300)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d8fa0, 0xc88640, 0xc00029eec0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 178 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000276dc0, 0xc00029e6c0, 0x8, 0xc00031dba8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0004184d0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004184d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0004184d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0004184d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004184d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0004184d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004184d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0004184d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004184d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0004184d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000414c40, 0xc000534400)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000414c40, 0xc000534400)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d9040, 0xc88640, 0xc00029f000)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 179 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00053c840, 0xc000370100, 0x8, 0xc0005820b8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000418630)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000418630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000418630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000418630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000418630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000418630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000414d20, 0xc000534500)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000414d20, 0xc000534500)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d90e0, 0xc88640, 0xc00029f0c0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 180 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00050fe40, 0xc0002f66c0, 0x8, 0xc000511988)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0004186e0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004186e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0004186e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0004186e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004186e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0004186e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004186e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0004186e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004186e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0004186e0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00037a1c0, 0xc0003c4300)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00037a1c0, 0xc0003c4300)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d9180, 0xc88640, 0xc0002f7780)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 181 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0005ba2c0, 0xc0002f7880, 0x8, 0xc0005132a8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000328840)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328840)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000328840)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000328840)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328840)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000328840)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328840)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000328840)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328840)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000328840)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000324fc0, 0xc000534000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000324fc0, 0xc000534000)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d9220, 0xc88640, 0xc00029ecc0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 182 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000276580, 0xc00029e580, 0x8, 0xc000510e58)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000204630)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000204630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000204630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000204630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000204630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000204630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000216e00, 0xc0001bbb00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000216e00, 0xc0001bbb00)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d92c0, 0xc88640, 0xc000536040)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 183 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00053d080, 0xc000370240, 0x8, 0xc00053ace8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000270160)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000270160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000270160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000270160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000270160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000270160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00026c000, 0xc000548000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00026c000, 0xc000548000)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d9360, 0xc88640, 0xc00025bcc0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 184 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000277340, 0xc00029e800, 0x8, 0xc0001fee18)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc00037ec60)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037ec60)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc00037ec60)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00037ec60)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037ec60)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00037ec60)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037ec60)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00037ec60)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037ec60)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc00037ec60)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000216620, 0xc00025e200)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000216620, 0xc00025e200)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d9400, 0xc88640, 0xc00025bd00)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 185 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000551b80, 0xc000580580, 0x8, 0xc0000a4678)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0002704d0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002704d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0002704d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0002704d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002704d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0002704d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002704d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0002704d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002704d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0002704d0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00026d420, 0xc000548100)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00026d420, 0xc000548100)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d94a0, 0xc88640, 0xc00025bd40)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 186 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0005ba420, 0xc000536100, 0x8, 0xc000430ce8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000270580)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000270580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000270580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000270580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000270580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000270580)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00026d500, 0xc000548200)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00026d500, 0xc000548200)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d9540, 0xc88640, 0xc00025be40)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 187 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00053f340, 0xc00029f340, 0x8, 0xc000430898)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000270370)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000270370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000270370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000270370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000270370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000270370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00026d340, 0xc00025ff00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00026d340, 0xc00025ff00)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d95e0, 0xc88640, 0xc00025bc00)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 188 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00050edc0, 0xc0002f6280, 0x8, 0xc000511078)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000204790)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000204790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000204790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000204790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000204790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000204790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000216ee0, 0xc0001bbc00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000216ee0, 0xc0001bbc00)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d9680, 0xc88640, 0xc000536140)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 189 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0005baf20, 0xc000536580, 0x8, 0xc0004313e8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000328370)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000328370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000328370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000328370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000328370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000328370)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc0004140e0, 0xc000534700)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc0004140e0, 0xc000534700)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d9720, 0xc88640, 0xc000536200)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 190 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000550dc0, 0xc000580280, 0x8, 0xc0005133a8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000204160)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000204160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000204160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000204160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000204160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000204160)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000324000, 0xc000300000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000324000, 0xc000300000)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d97c0, 0xc88640, 0xc000536240)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 191 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0003a0b00, 0xc000580840, 0x8, 0xc0000a5cc8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000204bb0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000204bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000204bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000204bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000204bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000204bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000324380, 0xc000300300)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000324380, 0xc000300300)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d9860, 0xc88640, 0xc000536280)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 192 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000551340, 0xc0005803c0, 0x8, 0xc000513858)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000204420)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000204420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000204420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000204420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000204420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000204420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000204420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc0003240e0, 0xc000300100)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc0003240e0, 0xc000300100)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d9900, 0xc88640, 0xc00025bfc0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 193 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0003198c0, 0xc00025bbc0, 0x8, 0xc000430408)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000270210)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000270210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000270210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000270210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000270210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000270210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000270210)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00026d260, 0xc0001bb500)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00026d260, 0xc0001bb500)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0001d99a0, 0xc88640, 0xc0001b7a80)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 216 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0005bb4a0, 0xc0005366c0, 0x8, 0xc000431848)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000328630)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000328630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000328630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000328630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000328630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000328630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000328630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc0004141c0, 0xc000534800)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc0004141c0, 0xc000534800)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef4a0, 0xc88640, 0xc00029f200)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 217 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00053f8c0, 0xc00029e340, 0x8, 0xc00055f3b8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc00037e630)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc00037e630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00037e630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00037e630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00037e630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc00037e630)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc0002162a0, 0xc00025e000)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc0002162a0, 0xc00025e000)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef540, 0xc88640, 0xc0001a5400)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 218 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0000ba6e0, 0xc0001a5ac0, 0x8, 0xc000583bc8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0000b0bb0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0000b0bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0000b0bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0000b0bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0000b0bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0000b0bb0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00047a9a0, 0xc0000d6600)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00047a9a0, 0xc0000d6600)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef5e0, 0xc88640, 0xc00029f1c0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 219 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000318000, 0xc0002f6700, 0x8, 0xc00055f858)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc00037e790)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc00037e790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00037e790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00037e790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00037e790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc00037e790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000216380, 0xc00025e100)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000216380, 0xc00025e100)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef680, 0xc88640, 0xc00029f240)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 220 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000276c60, 0xc00029e680, 0x8, 0xc0001fe888)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc00037eb00)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037eb00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc00037eb00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00037eb00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037eb00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00037eb00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037eb00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00037eb00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037eb00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc00037eb00)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000216540, 0xc0003c5800)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000216540, 0xc0003c5800)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef720, 0xc88640, 0xc000370940)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 221 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000456f20, 0xc000370d80, 0x8, 0xc000582538)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000418790)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000418790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000418790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000418790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000418790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000418790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc000414e00, 0xc0000d7100)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc000414e00, 0xc0000d7100)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef7c0, 0xc88640, 0xc0001a4e00)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 222 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0003a0580, 0xc0005806c0, 0x8, 0xc0000a5058)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc00037e420)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc00037e420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00037e420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00037e420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00037e420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00037e420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc00037e420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00047a380, 0xc0000d7200)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00047a380, 0xc0000d7200)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef860, 0xc88640, 0xc0001a4e80)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 223 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000318420, 0xc0002f67c0, 0x8, 0xc00053a558)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0000b0790)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0000b0790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0000b0790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0000b0790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0000b0790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0000b0790)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00047a460, 0xc0000d7300)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00047a460, 0xc0000d7300)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef900, 0xc88640, 0xc0001a4f40)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 224 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc000276420, 0xc00029e540, 0x8, 0xc0001fe2f8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0000b08f0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b08f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0000b08f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0000b08f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b08f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0000b08f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b08f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0000b08f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b08f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0000b08f0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00047a540, 0xc0000d7400)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00047a540, 0xc0000d7400)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002ef9a0, 0xc88640, 0xc0001a5040)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 225 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00050e000, 0xc0002f6000, 0x8, 0xc00053a988)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0000b09a0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b09a0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0000b09a0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0000b09a0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b09a0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0000b09a0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b09a0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0000b09a0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b09a0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0000b09a0)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00047a620, 0xc0000d7500)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00047a620, 0xc0000d7500)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002efa40, 0xc88640, 0xc0001a5140)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 226 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0004574a0, 0xc0001a5600, 0x8, 0xc000582e28)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0000b0420)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0000b0420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0000b0420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0000b0420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0000b0420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0000b0420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00047a700, 0xc0000d6200)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00047a700, 0xc0000d6200)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002efae0, 0xc88640, 0xc0001a5280)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 227 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc00050f8c0, 0xc0002f6400, 0x8, 0xc0005114f8)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc000418420)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc000418420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000418420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000418420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000418420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000418420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc000418420)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00037a0e0, 0xc0003c4100)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00037a0e0, 0xc0003c4100)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002efb80, 0xc88640, 0xc0001a52c0)
occamy    |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 228 [semacquire, 3 minutes]:
occamy    | sync.runtime_SemacquireMutex(0xc0001b436c, 0x0, 0x1)
occamy    |     /usr/local/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc0001b4368)
occamy    |     /usr/local/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /usr/local/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b4360, 0xc0000ba000, 0xc0001a5880, 0x8, 0xc000583738)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:200 +0x3ed
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b4360, 0xc0000b0a50)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:191 +0x464
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0a50)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0001fe120, 0xc0000b0a50)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0000b0a50)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0a50)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0000b0a50)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0a50)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0000b0a50)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0000b0a50)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0001da3c0, 0xc0000b0a50)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0001da3c0, 0xc86c40, 0xc00047a8c0, 0xc0000d6400)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002160e0, 0xc86c40, 0xc00047a8c0, 0xc0000d6400)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002efc20, 0xc88640, 0xc0001a5300)

The bug can be reproduced in the pressure test which was just committed in daa6393.

This bug may be introduced in d2afb2d.

The handshake process may still need to lock until everything(clients, parser, input threads, and so on) is ready.

Sadly, no.

This bug seems only exists in RDP connections:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fdc557fa700 (LWP 35)]
0x00007fdc65f12cc0 in pthread_mutex_lock () from /lib64/libpthread.so.0
Missing separate debuginfos, use: debuginfo-install bzip2-libs-1.0.6-13.el7.x86_64 cairo-1.15.12-4.el7.x86_64 expat-2.1.0-10.el7_3.x86_64 fontconfig-2.13.0-4.3.el7.x86_64 freerdp-libs-1.0.2-15.el7.x86_64 freetype-2.8-14.el7.x86_64 glibc-2.17-292.el7.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.15.1-37.el7_7.2.x86_64 libX11-1.6.7-2.el7.x86_64 libXau-1.0.8-2.1.el7.x86_64 libXext-1.3.3-3.el7.x86_64 libXrender-0.9.10-1.el7.x86_64 libcom_err-1.42.9-16.el7.x86_64 libglvnd-1.0.1-0.8.git5baa1e5.el7.x86_64 libglvnd-egl-1.0.1-0.8.git5baa1e5.el7.x86_64 libglvnd-glx-1.0.1-0.8.git5baa1e5.el7.x86_64 libjpeg-turbo-1.2.90-8.el7.x86_64 libpng-1.5.13-7.el7_2.x86_64 libselinux-2.5-14.1.el7.x86_64 libuuid-2.23.2-61.el7.x86_64 libwebp-0.3.0-7.el7.x86_64 libxcb-1.13-1.el7.x86_64 openssl-libs-1.0.2k-19.el7.x86_64 pcre-8.32-17.el7.x86_64 pixman-0.34.0-1.el7.x86_64 uuid-1.6.2-26.el7.x86_64 zlib-1.2.7-18.el7.x86_64
(gdb) bt
#0  0x00007fdc65f12cc0 in pthread_mutex_lock () from /lib64/libpthread.so.0
#1  0x00007fdc545e2049 in guac_common_list_lock (list=<optimized out>) at list.c:75
#2  0x00007fdc545e0658 in guac_rdp_svc_send_pipes (user=0x7fdc380029a0) at rdp_svc.c:78
#3  0x00007fdc545e0a1b in guac_rdp_user_join_handler (user=0x7fdc380029a0, argc=<optimized out>, 
    argv=<optimized out>) at user.c:85
#4  0x00007fdc6612be1d in guac_client_add_user (user=0x7fdc380029a0, argc=<optimized out>, 
    argv=<optimized out>) at client.c:285
#5  0x00000000009f80fe in _cgo_5063686ecc33_Cfunc_guac_client_add_user (v=0xc0003bb4c8)
    at cgo-gcc-prolog:89
#6  0x0000000000460c70 in runtime.asmcgocall () at /usr/local/go/src/runtime/asm_amd64.s:655
#7  0x000000000045e601 in runtime.exitsyscallfast.func1 ()
    at /usr/local/go/src/runtime/proc.go:3053
#8  0x000000c0003b6780 in ?? ()
#9  0x0000000000435e20 in ?? () at /usr/local/go/src/runtime/proc.go:1080
#10 0x0000000000000000 in ?? ()

However, VNC/SSH still have double free corruption, in a very rare case.

some random panics:

occamy    | [GIN] 2020/02/17 - 18:05:40 | 200 |     184.589µs |    172.16.238.1 | POST     /api/v1/login
occamy    | [GIN] 2020/02/17 - 18:05:40 | 200 |     127.039µs |    172.16.238.1 | POST     /api/v1/login
occamy    | time="2020-02-17T18:05:40Z" level=info msg="occamy-proxy: new session was created: $147f05a5-77cd-43c9-8f29-68d281185fe8"
occamy    | occamy-lib[140465286407936]: Cursor rendering: local
occamy    | occamy-lib[140465286407936]: Parameter "swap-red-blue" omitted. Using default value of 0.
occamy    | occamy-lib[140465286407936]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[140465286407936]: Parameter "color-depth" omitted. Using default value of 0.
occamy    | occamy-lib[140465286407936]: Parameter "dest-port" omitted. Using default value of 0.
occamy    | occamy-lib[140465286407936]: Parameter "encodings" omitted. Using default value of "zrle ultra copyrect hextile zlib corre rre raw".
occamy    | occamy-lib[140465286407936]: Parameter "autoretry" omitted. Using default value of 0.
occamy    | occamy-lib[140465286407936]: Parameter "reverse-connect" omitted. Using default value of 0.
occamy    | occamy-lib[140465286407936]: Parameter "listen-timeout" omitted. Using default value of 5000.
occamy    | occamy-lib[140465264764672]: Cursor rendering: local
occamy    | occamy-lib[140465264764672]: Parameter "swap-red-blue" omitted. Using default value of 0.
occamy    | occamy-lib[140465264764672]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[140465264764672]: Parameter "color-depth" omitted. Using default value of 0.
occamy    | occamy-lib[140465264764672]: Parameter "dest-port" omitted. Using default value of 0.
occamy    | occamy-lib[140465264764672]: Parameter "encodings" omitted. Using default value of "zrle ultra copyrect hextile zlib corre rre raw".
occamy    | occamy-lib[140465264764672]: Parameter "autoretry" omitted. Using default value of 0.
occamy    | occamy-lib[140465264764672]: Parameter "reverse-connect" omitted. Using default value of 0.
occamy    | occamy-lib[140465264764672]: Parameter "listen-timeout" omitted. Using default value of 5000.
occamy    | occamy-lib[140465264764672]: Cursor rendering: local
occamy    | occamy-lib[140465264764672]: Parameter "swap-red-blue" omitted. Using default value of 0.
occamy    | occamy-lib[140465264764672]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[140465264764672]: Parameter "color-depth" omitted. Using default value of 0.
occamy    | occamy-lib[140465264764672]: Parameter "dest-port" omitted. Using default value of 0.
occamy    | occamy-lib[140465264764672]: Parameter "encodings" omitted. Using default value of "zrle ultra copyrect hextile zlib corre rre raw".
occamy    | occamy-lib[140465264764672]: Parameter "autoretry" omitted. Using default value of 0.
occamy    | occamy-lib[140465264764672]: Parameter "reverse-connect" omitted. Using default value of 0.
occamy    | occamy-lib[140465264764672]: Parameter "listen-timeout" omitted. Using default value of 5000.
occamy    | occamy-lib[140465143797504]: Cursor rendering: local
occamy    | occamy-lib[140465143797504]: Parameter "swap-red-blue" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "color-depth" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "dest-port" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "encodings" omitted. Using default value of "zrle ultra copyrect hextile zlib corre rre raw".
occamy    | occamy-lib[140465143797504]: Parameter "autoretry" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "reverse-connect" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "listen-timeout" omitted. Using default value of 5000.
occamy    | occamy-lib[140465143797504]: Cursor rendering: local
occamy    | occamy-lib[140465143797504]: Parameter "swap-red-blue" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "color-depth" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "dest-port" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "encodings" omitted. Using default value of "zrle ultra copyrect hextile zlib corre rre raw".
occamy    | occamy-lib[140465143797504]: Parameter "autoretry" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "reverse-connect" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "listen-timeout" omitted. Using default value of 5000.
occamy    | occamy-lib[140465135404800]: Cursor rendering: local
occamy    | occamy-lib[140465135404800]: Parameter "swap-red-blue" omitted. Using default value of 0.
occamy    | occamy-lib[140465135404800]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[140465135404800]: Parameter "color-depth" omitted. Using default value of 0.
occamy    | occamy-lib[140465135404800]: Parameter "dest-port" omitted. Using default value of 0.
occamy    | occamy-lib[140465135404800]: Parameter "encodings" omitted. Using default value of "zrle ultra copyrect hextile zlib corre rre raw".
occamy    | occamy-lib[140465135404800]: Parameter "autoretry" omitted. Using default value of 0.
occamy    | occamy-lib[140465135404800]: Parameter "reverse-connect" omitted. Using default value of 0.
occamy    | occamy-lib[140465135404800]: Parameter "listen-timeout" omitted. Using default value of 5000.
occamy    | occamy-lib[140465143797504]: Cursor rendering: local
occamy    | occamy-lib[140465143797504]: Parameter "swap-red-blue" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "color-depth" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "dest-port" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "encodings" omitted. Using default value of "zrle ultra copyrect hextile zlib corre rre raw".
occamy    | occamy-lib[140465143797504]: Parameter "autoretry" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "reverse-connect" omitted. Using default value of 0.
occamy    | occamy-lib[140465143797504]: Parameter "listen-timeout" omitted. Using default value of 5000.
occamy    | occamy-lib[140464925685504]: Cursor rendering: local
occamy    | occamy-lib[140464925685504]: Parameter "swap-red-blue" omitted. Using default value of 0.
occamy    | occamy-lib[140464925685504]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[140464925685504]: Parameter "color-depth" omitted. Using default value of 0.
occamy    | occamy-lib[140464925685504]: Parameter "dest-port" omitted. Using default value of 0.
occamy    | occamy-lib[140464925685504]: Parameter "encodings" omitted. Using default value of "zrle ultra copyrect hextile zlib corre rre raw".
occamy    | occamy-lib[140464925685504]: Parameter "autoretry" omitted. Using default value of 0.
occamy    | occamy-lib[140464925685504]: Parameter "reverse-connect" omitted. Using default value of 0.
occamy    | occamy-lib[140464925685504]: Parameter "listen-timeout" omitted. Using default value of 5000.
occamy    | occamy-lib[140464925685504]: Cursor rendering: local
occamy    | occamy-lib[140464925685504]: Parameter "swap-red-blue" omitted. Using default value of 0.
occamy    | occamy-lib[140464925685504]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[140464925685504]: Parameter "color-depth" omitted. Using default value of 0.
occamy    | occamy-lib[140464925685504]: Parameter "dest-port" omitted. Using default value of 0.
occamy    | occamy-lib[140464925685504]: Parameter "encodings" omitted. Using default value of "zrle ultra copyrect hextile zlib corre rre raw".
occamy    | occamy-lib[140464925685504]: Parameter "autoretry" omitted. Using default value of 0.
occamy    | occamy-lib[140464925685504]: Parameter "reverse-connect" omitted. Using default value of 0.
occamy    | occamy-lib[140464925685504]: Parameter "listen-timeout" omitted. Using default value of 5000.
occamy    | occamyd: cairo-surface.c:2092: _cairo_surface_release_source_image: Assertion `!surface->finished' failed.
occamy    | SIGABRT: abort
occamy    | PC=0x7fc0da1d8337 m=23 sigcode=18446744073709551610
occamy    | 
occamy    | goroutine 0 [idle]:
occamy    | runtime: unknown pc 0x7fc0da1d8337
occamy    | stack: frame={sp:0x7fc089ff7898, fp:0x0} stack=[0x7fc0897fb0e8,0x7fc089fface8)
occamy    | 00007fc089ff7798:  000000000000006b  000000000000006b 
occamy    | 00007fc089ff77a8:  00007fc089ff7a20  00007fc05c006cf0 
occamy    | 00007fc089ff77b8:  00007fc089ff78f8  00007fc08c058800 
occamy    | 00007fc089ff77c8:  00007fc0da219e1c  000000fffbad8000 
occamy    | 00007fc089ff77d8:  00007fc05c006cf0  00007fc05c006d55 
occamy    | 00007fc089ff77e8:  00007fc05c006cf0  00007fc05c006cf0 
occamy    | 00007fc089ff77f8:  00007fc05c006d5b  00007fc05c006e1c 
occamy    | 00007fc089ff7808:  00007fc05c006cf0  00007fc05c006e1c 
occamy    | 00007fc089ff7818:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff7828:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff7838:  0000000000000000  0000000000c795c0 
occamy    | 00007fc089ff7848:  000000c0004a2340  0000000000000000 
occamy    | 00007fc089ff7858:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff7868:  00007fc0dabb9000  00007fc0da32cbe0 
occamy    | 00007fc089ff7878:  00007fc0d9f61fb1  00007fc0d9f62340 
occamy    | 00007fc089ff7888:  000000000000000c  00007fc08c058800 
occamy    | 00007fc089ff7898: <00007fc0da1d9a28  0000000000000020 
occamy    | 00007fc089ff78a8:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff78b8:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff78c8:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff78d8:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff78e8:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff78f8:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff7908:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff7918:  0000000000000000  00007ffec221ad48 
occamy    | 00007fc089ff7928:  00007fc0da329cf0  00007fc0d9f61f4d 
occamy    | 00007fc089ff7938:  000000000000082c  0000000000000000 
occamy    | 00007fc089ff7948:  00007fc0da1d2b53  00007fc089ff7930 
occamy    | 00007fc089ff7958:  0000000000000004  0000000000000000 
occamy    | 00007fc089ff7968:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff7978:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff7988:  0000000000000000  0000000500000000 
occamy    | runtime: unknown pc 0x7fc0da1d8337
occamy    | stack: frame={sp:0x7fc089ff7898, fp:0x0} stack=[0x7fc0897fb0e8,0x7fc089fface8)
occamy    | 00007fc089ff7798:  000000000000006b  000000000000006b 
occamy    | 00007fc089ff77a8:  00007fc089ff7a20  00007fc05c006cf0 
occamy    | 00007fc089ff77b8:  00007fc089ff78f8  00007fc08c058800 
occamy    | 00007fc089ff77c8:  00007fc0da219e1c  000000fffbad8000 
occamy    | 00007fc089ff77d8:  00007fc05c006cf0  00007fc05c006d55 
occamy    | 00007fc089ff77e8:  00007fc05c006cf0  00007fc05c006cf0 
occamy    | 00007fc089ff77f8:  00007fc05c006d5b  00007fc05c006e1c 
occamy    | 00007fc089ff7808:  00007fc05c006cf0  00007fc05c006e1c 
occamy    | 00007fc089ff7818:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff7828:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff7838:  0000000000000000  0000000000c795c0 
occamy    | 00007fc089ff7848:  000000c0004a2340  0000000000000000 
occamy    | 00007fc089ff7858:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff7868:  00007fc0dabb9000  00007fc0da32cbe0 
occamy    | 00007fc089ff7878:  00007fc0d9f61fb1  00007fc0d9f62340 
occamy    | 00007fc089ff7888:  000000000000000c  00007fc08c058800 
occamy    | 00007fc089ff7898: <00007fc0da1d9a28  0000000000000020 
occamy    | 00007fc089ff78a8:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff78b8:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff78c8:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff78d8:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff78e8:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff78f8:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff7908:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff7918:  0000000000000000  00007ffec221ad48 
occamy    | 00007fc089ff7928:  00007fc0da329cf0  00007fc0d9f61f4d 
occamy    | 00007fc089ff7938:  000000000000082c  0000000000000000 
occamy    | 00007fc089ff7948:  00007fc0da1d2b53  00007fc089ff7930 
occamy    | 00007fc089ff7958:  0000000000000004  0000000000000000 
occamy    | 00007fc089ff7968:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff7978:  0000000000000000  0000000000000000 
occamy    | 00007fc089ff7988:  0000000000000000  0000000500000000 
occamy    | 
occamy    | goroutine 73 [syscall]:
occamy    | runtime.cgocall(0x9f3a40, 0xc0005bd190, 0xc05c002c80)
occamy    |     /golang/go/src/runtime/cgocall.go:133 +0x5b fp=0xc0005bd160 sp=0xc0005bd128 pc=0x40572b
occamy    | github.com/changkun/occamy/lib._Cfunc_join_handler_bridge(0x7fc05c002990, 0x7fc00000000e, 0x7fc05c002c80, 0x0)
occamy    |     _cgo_gotypes.go:525 +0x4d fp=0xc0005bd190 sp=0xc0005bd160 pc=0x9eacad
occamy    | github.com/changkun/occamy/lib.(*User).Prepare.func5(0xc0002db300, 0xc00017c1c0, 0xe, 0xe, 0x7fc05c002c80, 0x0)
occamy    |     /occamy/lib/user.go:221 +0x8e fp=0xc0005bd1c8 sp=0xc0005bd190 pc=0x9edeae
occamy    | github.com/changkun/occamy/lib.(*User).Prepare(0xc0002db300, 0x0, 0x0)
occamy    |     /occamy/lib/user.go:221 +0x5b3 fp=0xc0005bd2a0 sp=0xc0005bd1c8 pc=0x9ecb23
occamy    | github.com/changkun/occamy/server.(*Session).Join(0xc000307d70, 0xc0004b14a0, 0xc000367658, 0x0, 0xc0005bd550, 0x0, 0x0)
occamy    |     /occamy/server/session.go:84 +0x3f7 fp=0xc0005bd4e8 sp=0xc0005bd2a0 pc=0x9f20e7
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc0004b14a0, 0xc000367658, 0x8, 0xc0004bf178)
occamy    |     /occamy/server/routers.go:58 +0x3a8 fp=0xc0005bd570 sp=0xc0005bd4e8 pc=0x9f1a28
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc0004d8210)
occamy    |     /occamy/server/routers.go:46 +0x447 fp=0xc0005bd7b8 sp=0xc0005bd570 pc=0x9f1467
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS-fm(0xc0004d8210)
occamy    |     /occamy/server/routers.go:31 +0x34 fp=0xc0005bd7d8 sp=0xc0005bd7b8 pc=0x9f3484
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004d8210)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b fp=0xc0005bd7f8 sp=0xc0005bd7d8 pc=0x9a918b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc0004d8210)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf fp=0xc0005bd868 sp=0xc0005bd7f8 pc=0x9be1ff
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0004d8210)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34 fp=0xc0005bd888 sp=0xc0005bd868 pc=0x9c0f94
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004d8210)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b fp=0xc0005bd8a8 sp=0xc0005bd888 pc=0x9a918b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0004d8210)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60 fp=0xc0005bd8e8 sp=0xc0005bd8a8 pc=0x9bbda0
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004d8210)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b fp=0xc0005bd908 sp=0xc0005bd8e8 pc=0x9a918b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0004d8210)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1 fp=0xc0005bdaa8 sp=0xc0005bd908 pc=0x9bae51
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004d8210)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b fp=0xc0005bdac8 sp=0xc0005bdaa8 pc=0x9a918b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc0004d8210)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0 fp=0xc0005bdbb0 sp=0xc0005bdac8 pc=0x9b26d0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc0004ba2a0, 0xc0004aa200)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133 fp=0xc0005bdbe8 sp=0xc0005bdbb0 pc=0x9b1f03
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc0004ba2a0, 0xc0004aa200)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3 fp=0xc0005bdc18 sp=0xc0005bdbe8 pc=0x6d5813
occamy    | net/http.(*conn).serve(0xc00045a1e0, 0xc795c0, 0xc0004a2340)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c fp=0xc0005bdfc8 sp=0xc0005bdc18 pc=0x6d118c
occamy    | runtime.goexit()
occamy    |     /golang/go/src/runtime/asm_amd64.s:1375 +0x1 fp=0xc0005bdfd0 sp=0xc0005bdfc8 pc=0x469271
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 1 [IO wait, locked to thread]:
occamy    | internal/poll.runtime_pollWait(0x7fc0ad8c0f48, 0x72, 0x0)
occamy    |     /golang/go/src/runtime/netpoll.go:203 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc00016a198, 0x72, 0x0, 0x0, 0xb60197)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy    | internal/poll.(*pollDesc).waitRead(...)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:92
occamy    | internal/poll.(*FD).Accept(0xc00016a180, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/internal/poll/fd_unix.go:384 +0x1d4
occamy    | net.(*netFD).accept(0xc00016a180, 0x484f01e265c25fdb, 0x0, 0x484f01e265c25fdb)
occamy    |     /golang/go/src/net/fd_unix.go:238 +0x42
occamy    | net.(*TCPListener).accept(0xc00000e920, 0x5e4ad5f4, 0xc000159cf0, 0x48a536)
occamy    |     /golang/go/src/net/tcpsock_posix.go:139 +0x32
occamy    | net.(*TCPListener).Accept(0xc00000e920, 0xc000159d40, 0x18, 0xc000000180, 0x6d5cbc)
occamy    |     /golang/go/src/net/tcpsock.go:261 +0x64
occamy    | net/http.(*Server).Serve(0xc00017c0e0, 0xc77a80, 0xc00000e920, 0x0, 0x0)
occamy    |     /golang/go/src/net/http/server.go:2901 +0x25d
occamy    | net/http.(*Server).ListenAndServe(0xc00017c0e0, 0x4, 0xb748a6)
occamy    |     /golang/go/src/net/http/server.go:2830 +0xb7
occamy    | github.com/changkun/occamy/server.(*proxy).serve(0xc00000e580)
occamy    |     /occamy/server/connection.go:70 +0x219
occamy    | github.com/changkun/occamy/server.Run(...)
occamy    |     /occamy/server/connection.go:39
occamy    | main.main()
occamy    |     /occamy/occamy.go:18 +0xe4
occamy    | 
occamy    | goroutine 34 [syscall]:
occamy    | os/signal.signal_recv(0x0)
occamy    |     /golang/go/src/runtime/sigqueue.go:147 +0x9c
occamy    | os/signal.loop()
occamy    |     /golang/go/src/os/signal/signal_unix.go:23 +0x22
occamy    | created by os/signal.Notify.func1
occamy    |     /golang/go/src/os/signal/signal.go:127 +0x44
occamy    | 
occamy    | goroutine 7 [chan receive]:
occamy    | github.com/changkun/occamy/server.(*proxy).serve.func1(0xc00017c0e0, 0xc00007e1e0)
occamy    |     /occamy/server/connection.go:60 +0xe9
occamy    | created by github.com/changkun/occamy/server.(*proxy).serve
occamy    |     /occamy/server/connection.go:57 +0x17c
occamy    | 
occamy    | goroutine 8 [IO wait]:
occamy    | internal/poll.runtime_pollWait(0x7fc0ad8c0e68, 0x72, 0xffffffffffffffff)
occamy    |     /golang/go/src/runtime/netpoll.go:203 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc00016a218, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy    | internal/poll.(*pollDesc).waitRead(...)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:92
occamy    | internal/poll.(*FD).Read(0xc00016a200, 0xc000268000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/internal/poll/fd_unix.go:169 +0x19b
occamy    | net.(*netFD).Read(0xc00016a200, 0xc000268000, 0x1000, 0x1000, 0x1aa, 0x0, 0x4cf6d2)
occamy    |     /golang/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc0000101c0, 0xc000268000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/net.go:184 +0x8e
occamy    | net/http.(*connReader).Read(0xc00025e3c0, 0xc000268000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/http/server.go:786 +0xf4
occamy    | bufio.(*Reader).fill(0xc00008ed20)
occamy    |     /golang/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).Peek(0xc00008ed20, 0x4, 0x0, 0x0, 0x0, 0x0, 0x4393c0)
occamy    |     /golang/go/src/bufio/bufio.go:138 +0x4f
occamy    | net/http.(*conn).readRequest(0xc000117360, 0xc795c0, 0xc000258700, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/http/server.go:963 +0xc76
occamy    | net/http.(*conn).serve(0xc000117360, 0xc795c0, 0xc000258700)
occamy    |     /golang/go/src/net/http/server.go:1822 +0x6d4
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 132 [syscall]:
occamy    | syscall.Syscall(0x0, 0x21, 0xc00052e000, 0x2000, 0xc0001b42f8, 0xc0001a6880, 0xc00032c5a0)
occamy    |     /golang/go/src/syscall/asm_linux_amd64.s:18 +0x5
occamy    | syscall.read(0x21, 0xc00052e000, 0x2000, 0x2000, 0x9e170b, 0xc0001b42a0, 0xc591f4)
occamy    |     /golang/go/src/syscall/zsyscall_linux_amd64.go:686 +0x5a
occamy    | syscall.Read(...)
occamy    |     /golang/go/src/syscall/syscall_unix.go:189
occamy    | github.com/changkun/occamy/protocol.IO.Read(0x21, 0xc00052e000, 0x2000, 0x2000, 0x2a, 0x0, 0x0)
occamy    |     /occamy/protocol/io.go:21 +0x49
occamy    | bufio.(*Reader).fill(0xc0003372c0)
occamy    |     /golang/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).ReadSlice(0xc0003372c0, 0x3b, 0x28, 0xc000338030, 0xc0001f6000, 0xc00032c748, 0x9d8b67)
occamy    |     /golang/go/src/bufio/bufio.go:359 +0x3d
occamy    | bufio.(*Reader).ReadBytes(0xc0003372c0, 0x3b, 0xc000338030, 0x28, 0x28, 0x0, 0x0)
occamy    |     /golang/go/src/bufio/bufio.go:438 +0x7a
occamy    | github.com/changkun/occamy/protocol.(*InstructionIO).ReadRaw(...)
occamy    |     /occamy/protocol/instruction.go:156
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func1(0xc000337320, 0xc000308840, 0xc00030cd60, 0xc0001f6000)
occamy    |     /occamy/server/session.go:119 +0x41
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:116 +0xbb
occamy    | 
occamy    | goroutine 104 [syscall]:
occamy    | github.com/changkun/occamy/lib._Cfunc_guac_user_input_thread(0x7fc074002a00, 0x7fc000e4e1c0)
occamy    |     _cgo_gotypes.go:497 +0x41
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection.func2(0xc0002d8000)
occamy    |     /occamy/lib/user.go:239 +0x5d
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection(0xc0002d8000, 0xc00007e4e0)
occamy    |     /occamy/lib/user.go:239 +0x3d
occamy    | created by github.com/changkun/occamy/server.(*Session).Join
occamy    |     /occamy/server/session.go:93 +0x51a
occamy    | 
occamy    | goroutine 99 [chan receive]:
occamy    | github.com/changkun/occamy/server.(*Session).serveIO(0xc000307d70, 0xc0003a03e0, 0xc000135340, 0xc0002368a0, 0xc0003c5980)
occamy    |     /occamy/server/session.go:148 +0x121
occamy    | github.com/changkun/occamy/server.(*Session).Join(0xc000307d70, 0xc000135340, 0xc000363658, 0x0, 0xc0002e7550, 0x0, 0x0)
occamy    |     /occamy/server/session.go:99 +0x59b
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc000135340, 0xc000363658, 0x8, 0xc00011d198)
occamy    |     /occamy/server/routers.go:58 +0x3a8
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc00012a370)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc00012a370)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00012a370)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00012a370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00012a370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc00012a370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc00017c2a0, 0xc00014ed00)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc00017c2a0, 0xc00014ed00)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc000117900, 0xc795c0, 0xc000070bc0)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 98 [chan receive]:
occamy    | github.com/changkun/occamy/server.(*Session).serveIO(0xc000307d70, 0xc00000f0e0, 0xc0004b09a0, 0xc00007e4e0, 0xc0002d8000)
occamy    |     /occamy/server/session.go:148 +0x121
occamy    | github.com/changkun/occamy/server.(*Session).Join(0xc000307d70, 0xc0004b09a0, 0xc000365658, 0x0, 0xc000233550, 0x0, 0x0)
occamy    |     /occamy/server/session.go:99 +0x59b
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc0004b09a0, 0xc000365658, 0x8, 0xc0004be8a8)
occamy    |     /occamy/server/routers.go:58 +0x3a8
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc0001bc000)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc0001bc000)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0001bc000)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0001bc000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0001bc000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc0001bc000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc0004ba0e0, 0xc0001ae500)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc0004ba0e0, 0xc0001ae500)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc000117860, 0xc795c0, 0xc0001926c0)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 48 [runnable]:
occamy    | github.com/gorilla/websocket.(*Conn).WriteMessage(0xc0001f6580, 0x1, 0xc0005ca000, 0x28, 0x28, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:740 +0x2d8
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func1(0xc000189320, 0xc0001968b0, 0xc000190e60, 0xc0001f6580)
occamy    |     /occamy/server/session.go:123 +0x92
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:116 +0xbb
occamy    | 
occamy    | goroutine 12 [IO wait]:
occamy    | internal/poll.runtime_pollWait(0x7fc0ad8c0a08, 0x72, 0xffffffffffffffff)
occamy    |     /golang/go/src/runtime/netpoll.go:203 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc00016a418, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy    | internal/poll.(*pollDesc).waitRead(...)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:92
occamy    | internal/poll.(*FD).Read(0xc00016a400, 0xc0002ab000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/internal/poll/fd_unix.go:169 +0x19b
occamy    | net.(*netFD).Read(0xc00016a400, 0xc0002ab000, 0x1000, 0x1000, 0x1aa, 0x0, 0x4cf6d2)
occamy    |     /golang/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc0000101e0, 0xc0002ab000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/net.go:184 +0x8e
occamy    | net/http.(*connReader).Read(0xc00028a630, 0xc0002ab000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/http/server.go:786 +0xf4
occamy    | bufio.(*Reader).fill(0xc000073260)
occamy    |     /golang/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).Peek(0xc000073260, 0x4, 0x0, 0x0, 0x0, 0x0, 0x4393c0)
occamy    |     /golang/go/src/bufio/bufio.go:138 +0x4f
occamy    | net/http.(*conn).readRequest(0xc0001175e0, 0xc795c0, 0xc000070a00, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/http/server.go:963 +0xc76
occamy    | net/http.(*conn).serve(0xc0001175e0, 0xc795c0, 0xc000070a00)
occamy    |     /golang/go/src/net/http/server.go:1822 +0x6d4
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 31 [IO wait]:
occamy    | internal/poll.runtime_pollWait(0x7fc0ad8c03e8, 0x72, 0xffffffffffffffff)
occamy    |     /golang/go/src/runtime/netpoll.go:203 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc00016a818, 0x72, 0x2000, 0x2000, 0xffffffffffffffff)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy    | internal/poll.(*pollDesc).waitRead(...)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:92
occamy    | internal/poll.(*FD).Read(0xc00016a800, 0xc000370000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/internal/poll/fd_unix.go:169 +0x19b
occamy    | net.(*netFD).Read(0xc00016a800, 0xc000370000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc0000101f8, 0xc000370000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/net.go:184 +0x8e
occamy    | bufio.(*Reader).fill(0xc000336de0)
occamy    |     /golang/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).Peek(0xc000336de0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/bufio/bufio.go:138 +0x4f
occamy    | github.com/gorilla/websocket.(*Conn).read(0xc00036a580, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:357 +0x40
occamy    | github.com/gorilla/websocket.(*Conn).advanceFrame(0xc00036a580, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:787 +0x5c
occamy    | github.com/gorilla/websocket.(*Conn).NextReader(0xc00036a580, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:947 +0x8f
occamy    | github.com/gorilla/websocket.(*Conn).ReadMessage(0xc00036a580, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:1028 +0x2f
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func2(0xc00008f680, 0xc00024ac40, 0xc0003a0320, 0xc00036a580)
occamy    |     /occamy/server/session.go:135 +0x3a
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:132 +0x101
occamy    | 
occamy    | goroutine 105 [runnable]:
occamy    | github.com/gorilla/websocket.(*Conn).WriteMessage(0xc0004b09a0, 0x1, 0xc0002fc000, 0x28, 0x28, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:740 +0x2d8
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func1(0xc000073b60, 0xc00002ae90, 0xc00000f0e0, 0xc0004b09a0)
occamy    |     /occamy/server/session.go:123 +0x92
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:116 +0xbb
occamy    | 
occamy    | goroutine 106 [IO wait]:
occamy    | internal/poll.runtime_pollWait(0x7fc0ad8c0068, 0x72, 0xffffffffffffffff)
occamy    |     /golang/go/src/runtime/netpoll.go:203 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc00016a898, 0x72, 0x2000, 0x2000, 0xffffffffffffffff)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy    | internal/poll.(*pollDesc).waitRead(...)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:92
occamy    | internal/poll.(*FD).Read(0xc00016a880, 0xc0004dc000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/internal/poll/fd_unix.go:169 +0x19b
occamy    | net.(*netFD).Read(0xc00016a880, 0xc0004dc000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc000010200, 0xc0004dc000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/net.go:184 +0x8e
occamy    | bufio.(*Reader).fill(0xc0004a6360)
occamy    |     /golang/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).Peek(0xc0004a6360, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/bufio/bufio.go:138 +0x4f
occamy    | github.com/gorilla/websocket.(*Conn).read(0xc0004b09a0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:357 +0x40
occamy    | github.com/gorilla/websocket.(*Conn).advanceFrame(0xc0004b09a0, 0x40b94b, 0xc000012000, 0x43947c)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:787 +0x5c
occamy    | github.com/gorilla/websocket.(*Conn).NextReader(0xc0004b09a0, 0xc000049f40, 0x44b2cf, 0xc000072000, 0x4, 0xc000072000)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:947 +0x8f
occamy    | github.com/gorilla/websocket.(*Conn).ReadMessage(0xc0004b09a0, 0x7fc0ac079101, 0xc000049fc8, 0x6cb413, 0xc000070a80, 0xc69e01, 0xc00007c640)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:1028 +0x2f
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func2(0xc000073b60, 0xc00002ae90, 0xc00000f0e0, 0xc0004b09a0)
occamy    |     /occamy/server/session.go:135 +0x3a
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:132 +0x101
occamy    | 
occamy    | goroutine 146 [IO wait]:
occamy    | internal/poll.runtime_pollWait(0x7fc0ad8c04c8, 0x72, 0xffffffffffffffff)
occamy    |     /golang/go/src/runtime/netpoll.go:203 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc00009db18, 0x72, 0x2000, 0x2000, 0xffffffffffffffff)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy    | internal/poll.(*pollDesc).waitRead(...)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:92
occamy    | internal/poll.(*FD).Read(0xc00009db00, 0xc0004ec000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/internal/poll/fd_unix.go:169 +0x19b
occamy    | net.(*netFD).Read(0xc00009db00, 0xc0004ec000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc000098578, 0xc0004ec000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/net.go:184 +0x8e
occamy    | bufio.(*Reader).fill(0xc0004a64e0)
occamy    |     /golang/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).Peek(0xc0004a64e0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/bufio/bufio.go:138 +0x4f
occamy    | github.com/gorilla/websocket.(*Conn).read(0xc0004b0f20, 0x2, 0xc000328000, 0xc00032e5e0, 0x43238a, 0xb8b008, 0x7fc0ad8c0790)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:357 +0x40
occamy    | github.com/gorilla/websocket.(*Conn).advanceFrame(0xc0004b0f20, 0x40b94b, 0xc000012000, 0x43947c)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:787 +0x5c
occamy    | github.com/gorilla/websocket.(*Conn).NextReader(0xc0004b0f20, 0xc00032e740, 0x44b2cf, 0xc000336180, 0x4, 0xc000336180)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:947 +0x8f
occamy    | github.com/gorilla/websocket.(*Conn).ReadMessage(0xc0004b0f20, 0x7fc0ac079101, 0xc00032e7c8, 0x6cb413, 0xc00030e300, 0xc69e01, 0xc0000bcc80)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:1028 +0x2f
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func2(0xc00008f740, 0xc00024ac50, 0xc0003a0360, 0xc0004b0f20)
occamy    |     /occamy/server/session.go:135 +0x3a
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:132 +0x101
occamy    | 
occamy    | goroutine 33 [runnable]:
occamy    | syscall.Syscall(0x0, 0x28, 0xc0003d8000, 0x2000, 0x2dd, 0x2000, 0x0)
occamy    |     /golang/go/src/syscall/asm_linux_amd64.s:18 +0x5
occamy    | syscall.read(0x28, 0xc0003d8000, 0x2000, 0x2000, 0x43ffbc, 0x4393c0, 0xb8b030)
occamy    |     /golang/go/src/syscall/zsyscall_linux_amd64.go:686 +0x5a
occamy    | syscall.Read(...)
occamy    |     /golang/go/src/syscall/syscall_unix.go:189
occamy    | github.com/changkun/occamy/protocol.IO.Read(0x28, 0xc0003d8000, 0x2000, 0x2000, 0x5, 0x7fc0ad8c0cd0, 0x203000)
occamy    |     /occamy/protocol/io.go:21 +0x49
occamy    | bufio.(*Reader).fill(0xc00008f6e0)
occamy    |     /golang/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).ReadSlice(0xc00008f6e0, 0xc00048203b, 0xc000257180, 0x7fc0dab677d0, 0x40b94b, 0xc000012000, 0x43947c)
occamy    |     /golang/go/src/bufio/bufio.go:359 +0x3d
occamy    | bufio.(*Reader).ReadBytes(0xc00008f6e0, 0x7fc0ac07913b, 0xc0000497c8, 0x6cb413, 0xc000258bc0, 0xc69e01, 0xc0000bce60)
occamy    |     /golang/go/src/bufio/bufio.go:438 +0x7a
occamy    | github.com/changkun/occamy/protocol.(*InstructionIO).ReadRaw(...)
occamy    |     /occamy/protocol/instruction.go:156
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func1(0xc00008f740, 0xc00024ac50, 0xc0003a0360, 0xc0004b0f20)
occamy    |     /occamy/server/session.go:119 +0x41
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:116 +0xbb
occamy    | 
occamy    | goroutine 32 [syscall]:
occamy    | github.com/changkun/occamy/lib._Cfunc_guac_user_input_thread(0x7fc074004800, 0x7fc000e4e1c0)
occamy    |     _cgo_gotypes.go:497 +0x41
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection.func2(0xc0002d9980)
occamy    |     /occamy/lib/user.go:239 +0x5d
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection(0xc0002d9980, 0xc0002367e0)
occamy    |     /occamy/lib/user.go:239 +0x3d
occamy    | created by github.com/changkun/occamy/server.(*Session).Join
occamy    |     /occamy/server/session.go:93 +0x51a
occamy    | 
occamy    | goroutine 47 [syscall]:
occamy    | github.com/changkun/occamy/lib._Cfunc_guac_user_input_thread(0x7fc074004b20, 0x7fc000e4e1c0)
occamy    |     _cgo_gotypes.go:497 +0x41
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection.func2(0xc00059e000)
occamy    |     /occamy/lib/user.go:239 +0x5d
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection(0xc00059e000, 0xc00019a6c0)
occamy    |     /occamy/lib/user.go:239 +0x3d
occamy    | created by github.com/changkun/occamy/server.(*Session).Join
occamy    |     /occamy/server/session.go:93 +0x51a
occamy    | 
occamy    | goroutine 30 [runnable]:
occamy    | syscall.Syscall(0x1, 0xe, 0xc00037200c, 0xc, 0xc, 0xc, 0x0)
occamy    |     /golang/go/src/syscall/asm_linux_amd64.s:18 +0x5
occamy    | syscall.write(0xe, 0xc00037200c, 0xc, 0x2002, 0x0, 0x416253, 0xc000316370)
occamy    |     /golang/go/src/syscall/zsyscall_linux_amd64.go:914 +0x5a
occamy    | syscall.Write(...)
occamy    |     /golang/go/src/syscall/syscall_unix.go:214
occamy    | internal/poll.(*FD).Write(0xc00016a800, 0xc00037200c, 0xc, 0x2002, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/internal/poll/fd_unix.go:268 +0x179
occamy    | net.(*netFD).Write(0xc00016a800, 0xc00037200c, 0xc, 0x2002, 0x0, 0x77, 0x0)
occamy    |     /golang/go/src/net/fd_unix.go:220 +0x4f
occamy    | net.(*conn).Write(0xc0000101f8, 0xc00037200c, 0xc, 0x2002, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/net.go:196 +0x8e
occamy    | github.com/gorilla/websocket.(*Conn).write(0xc00036a580, 0x1, 0x0, 0x0, 0x0, 0xc00037200c, 0xc, 0x2002, 0xc00002a360, 0x0, ...)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:378 +0x151
occamy    | github.com/gorilla/websocket.(*messageWriter).flushFrame(0xc000044718, 0xc00002a301, 0xc00002a360, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:595 +0x25f
occamy    | github.com/gorilla/websocket.(*Conn).WriteMessage(0xc00036a580, 0x1, 0xc00002a360, 0xa, 0xa, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:752 +0x247
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func1(0xc00008f680, 0xc00024ac40, 0xc0003a0320, 0xc00036a580)
occamy    |     /occamy/server/session.go:123 +0x92
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:116 +0xbb
occamy    | 
occamy    | goroutine 131 [syscall]:
occamy    | github.com/changkun/occamy/lib._Cfunc_guac_user_input_thread(0x7fc07c002a00, 0x7fc000e4e1c0)
occamy    |     _cgo_gotypes.go:497 +0x41
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection.func2(0xc000526000)
occamy    |     /occamy/lib/user.go:239 +0x5d
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection(0xc000526000, 0xc0003106c0)
occamy    |     /occamy/lib/user.go:239 +0x3d
occamy    | created by github.com/changkun/occamy/server.(*Session).Join
occamy    |     /occamy/server/session.go:93 +0x51a
occamy    | 
occamy    | goroutine 42 [chan receive]:
occamy    | github.com/changkun/occamy/server.(*Session).serveIO(0xc000307d70, 0xc00030cd60, 0xc0001f6000, 0xc0003106c0, 0xc000526000)
occamy    |     /occamy/server/session.go:148 +0x121
occamy    | github.com/changkun/occamy/server.(*Session).Join(0xc000307d70, 0xc0001f6000, 0xc0003a5658, 0x0, 0xc000525550, 0x0, 0x0)
occamy    |     /occamy/server/session.go:99 +0x59b
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc0001f6000, 0xc0003a5658, 0x8, 0xc0001c1cc8)
occamy    |     /occamy/server/routers.go:58 +0x3a8
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc0001bc0b0)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc0b0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc0001bc0b0)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0001bc0b0)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc0b0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0001bc0b0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc0b0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0001bc0b0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc0b0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc0001bc0b0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc0001b6460, 0xc0001ae600)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc0001b6460, 0xc0001ae600)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc0001aa0a0, 0xc795c0, 0xc000192740)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 25 [chan receive]:
occamy    | github.com/changkun/occamy/server.(*Session).serveIO(0xc000307d70, 0xc00000e040, 0xc00036ab00, 0xc0004b4000, 0xc00059f980)
occamy    |     /occamy/server/session.go:148 +0x121
occamy    | github.com/changkun/occamy/server.(*Session).Join(0xc000307d70, 0xc00036ab00, 0xc0001eb658, 0x0, 0xc0005c1550, 0x0, 0x0)
occamy    |     /occamy/server/session.go:99 +0x59b
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc00036ab00, 0xc0001eb658, 0x8, 0xc000508418)
occamy    |     /occamy/server/routers.go:58 +0x3a8
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc00031c160)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c160)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc00031c160)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00031c160)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c160)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00031c160)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c160)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00031c160)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c160)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc00031c160)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc000318620, 0xc000356d00)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc000318620, 0xc000356d00)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc0003ac0a0, 0xc795c0, 0xc00030ea40)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 23 [chan receive]:
occamy    | github.com/changkun/occamy/server.(*Session).serveIO(0xc000307d70, 0xc00030cde0, 0xc00040b4a0, 0xc000310780, 0xc000527980)
occamy    |     /occamy/server/session.go:148 +0x121
occamy    | github.com/changkun/occamy/server.(*Session).Join(0xc000307d70, 0xc00040b4a0, 0xc0001e7658, 0x0, 0xc000521550, 0x0, 0x0)
occamy    |     /occamy/server/session.go:99 +0x59b
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc00040b4a0, 0xc0001e7658, 0x8, 0xc000423198)
occamy    |     /occamy/server/routers.go:58 +0x3a8
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc00041c000)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00041c000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc00041c000)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00041c000)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00041c000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00041c000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00041c000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00041c000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00041c000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc00041c000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc0004182a0, 0xc000356c00)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc0004182a0, 0xc000356c00)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc0000bff40, 0xc795c0, 0xc00030e9c0)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 24 [chan receive]:
occamy    | github.com/changkun/occamy/server.(*Session).serveIO(0xc000307d70, 0xc0003a0360, 0xc0004b0f20, 0xc0002367e0, 0xc0002d9980)
occamy    |     /occamy/server/session.go:148 +0x121
occamy    | github.com/changkun/occamy/server.(*Session).Join(0xc000307d70, 0xc0004b0f20, 0xc0003a9658, 0x0, 0xc0002eb550, 0x0, 0x0)
occamy    |     /occamy/server/session.go:99 +0x59b
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc0004b0f20, 0xc0003a9658, 0x8, 0xc0004becf8)
occamy    |     /occamy/server/routers.go:58 +0x3a8
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc0004d80b0)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004d80b0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc0004d80b0)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0004d80b0)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004d80b0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0004d80b0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004d80b0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0004d80b0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004d80b0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc0004d80b0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc0004ba1c0, 0xc000356b00)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc0004ba1c0, 0xc000356b00)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc0003ac000, 0xc795c0, 0xc00030e940)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 133 [IO wait]:
occamy    | internal/poll.runtime_pollWait(0x7fc0ac03dee8, 0x72, 0xffffffffffffffff)
occamy    |     /golang/go/src/runtime/netpoll.go:203 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc0001a6898, 0x72, 0x2000, 0x2000, 0xffffffffffffffff)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy    | internal/poll.(*pollDesc).waitRead(...)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:92
occamy    | internal/poll.(*FD).Read(0xc0001a6880, 0xc0001f4000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/internal/poll/fd_unix.go:169 +0x19b
occamy    | net.(*netFD).Read(0xc0001a6880, 0xc0001f4000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc00018e088, 0xc0001f4000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/net.go:184 +0x8e
occamy    | bufio.(*Reader).fill(0xc000188d20)
occamy    |     /golang/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).Peek(0xc000188d20, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/bufio/bufio.go:138 +0x4f
occamy    | github.com/gorilla/websocket.(*Conn).read(0xc0001f6000, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:357 +0x40
occamy    | github.com/gorilla/websocket.(*Conn).advanceFrame(0xc0001f6000, 0x40b94b, 0xc000012000, 0x43947c)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:787 +0x5c
occamy    | github.com/gorilla/websocket.(*Conn).NextReader(0xc0001f6000, 0xc00032ff40, 0x44b2cf, 0xc000336360, 0x4, 0xc000336360)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:947 +0x8f
occamy    | github.com/gorilla/websocket.(*Conn).ReadMessage(0xc0001f6000, 0x7fc0ac079101, 0xc00032ffc8, 0x6cb413, 0xc00030e780, 0xc69e01, 0xc000304730)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:1028 +0x2f
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func2(0xc000337320, 0xc000308840, 0xc00030cd60, 0xc0001f6000)
occamy    |     /occamy/server/session.go:135 +0x3a
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:132 +0x101
occamy    | 
occamy    | goroutine 16 [chan receive, locked to thread]:
occamy    | github.com/changkun/occamy/server.(*Session).serveIO(0xc000307d70, 0xc0003a0320, 0xc00036a580, 0xc000236780, 0xc0003c4000)
occamy    |     /occamy/server/session.go:148 +0x121
occamy    | github.com/changkun/occamy/server.(*Session).Join(0xc000307d70, 0xc00036a580, 0xc00022f658, 0x1, 0xc00022f550, 0x0, 0x0)
occamy    |     /occamy/server/session.go:99 +0x59b
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc00036a580, 0xc00022f658, 0x8, 0xc000333ee8)
occamy    |     /occamy/server/routers.go:70 +0x269
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc00031c000)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc00031c000)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00031c000)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00031c000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00031c000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc00031c000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc000318540, 0xc000356f00)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc000318540, 0xc000356f00)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc0001177c0, 0xc795c0, 0xc00030eb40)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 26 [chan receive]:
occamy    | github.com/changkun/occamy/server.(*Session).serveIO(0xc000307d70, 0xc000190e60, 0xc0001f6580, 0xc00019a6c0, 0xc00059e000)
occamy    |     /occamy/server/session.go:148 +0x121
occamy    | github.com/changkun/occamy/server.(*Session).Join(0xc000307d70, 0xc0001f6580, 0xc0001ed658, 0x0, 0xc00059d550, 0x0, 0x0)
occamy    |     /occamy/server/session.go:99 +0x59b
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc0001f6580, 0xc0001ed658, 0x8, 0xc0001f81d8)
occamy    |     /occamy/server/routers.go:58 +0x3a8
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc0001bc210)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc210)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc0001bc210)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0001bc210)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc210)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0001bc210)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc210)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0001bc210)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc210)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc0001bc210)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc0001b6540, 0xc000356e00)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc0001b6540, 0xc000356e00)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc0003ac140, 0xc795c0, 0xc00030eac0)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 29 [syscall]:
occamy    | github.com/changkun/occamy/lib._Cfunc_guac_user_input_thread(0x7fc098023ba0, 0x7fc000e4e1c0)
occamy    |     _cgo_gotypes.go:497 +0x41
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection.func2(0xc0003c4000)
occamy    |     /occamy/lib/user.go:239 +0x5d
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection(0xc0003c4000, 0xc000236780)
occamy    |     /occamy/lib/user.go:239 +0x3d
occamy    | created by github.com/changkun/occamy/server.(*Session).Join
occamy    |     /occamy/server/session.go:93 +0x51a
occamy    | 
occamy    | goroutine 27 [semacquire]:
occamy    | sync.runtime_SemacquireMutex(0xc00000e594, 0xc000098500, 0x1)
occamy    |     /golang/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc00000e590)
occamy    |     /golang/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /golang/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc000253ce0, 0xc0001e9658, 0x8, 0xc0003ae428)
occamy    |     /occamy/server/routers.go:55 +0x3d5
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc000250370)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000250370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc000250370)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc000250370)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000250370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc000250370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000250370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000250370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc000250370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc000250370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc000388380, 0xc0000d0d00)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc000388380, 0xc0000d0d00)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc0003ac1e0, 0xc795c0, 0xc000258cc0)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 70 [semacquire]:
occamy    | sync.runtime_SemacquireMutex(0xc00000e594, 0xc000446000, 0x1)
occamy    |     /golang/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc00000e590)
occamy    |     /golang/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /golang/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc0004b1a20, 0xc0004f7658, 0x8, 0xc0004bf618)
occamy    |     /occamy/server/routers.go:55 +0x3d5
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc0004d8370)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004d8370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc0004d8370)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0004d8370)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004d8370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0004d8370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004d8370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0004d8370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0004d8370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc0004d8370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc0004ba380, 0xc0004aa300)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc0004ba380, 0xc0004aa300)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc00045a000, 0xc795c0, 0xc0004a2440)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 71 [semacquire]:
occamy    | sync.runtime_SemacquireMutex(0xc00000e594, 0xc000446000, 0x1)
occamy    |     /golang/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc00000e590)
occamy    |     /golang/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /golang/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc0001f7080, 0xc000185658, 0x8, 0xc0001f8ae8)
occamy    |     /occamy/server/routers.go:55 +0x3d5
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc0001bc4d0)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc4d0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc0001bc4d0)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0001bc4d0)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc4d0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0001bc4d0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc4d0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0001bc4d0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc4d0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc0001bc4d0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc0001b6700, 0xc0001ae800)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc0001b6700, 0xc0001ae800)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc00045a0a0, 0xc795c0, 0xc0001929c0)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 72 [semacquire]:
occamy    | sync.runtime_SemacquireMutex(0xc00000e594, 0xc000446000, 0x1)
occamy    |     /golang/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc00000e590)
occamy    |     /golang/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /golang/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc0002c8420, 0xc000183658, 0x8, 0xc00011df18)
occamy    |     /occamy/server/routers.go:55 +0x3d5
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc00012a790)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a790)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc00012a790)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00012a790)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a790)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00012a790)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a790)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00012a790)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a790)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc00012a790)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc00017c540, 0xc00014f000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc00017c540, 0xc00014f000)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc00045a140, 0xc795c0, 0xc000070ec0)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 74 [semacquire]:
occamy    | sync.runtime_SemacquireMutex(0xc00000e594, 0xc000446000, 0x1)
occamy    |     /golang/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc00000e590)
occamy    |     /golang/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /golang/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc000135e40, 0xc000321658, 0x8, 0xc00011da98)
occamy    |     /occamy/server/routers.go:55 +0x3d5
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc00012a630)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a630)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc00012a630)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00012a630)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a630)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00012a630)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a630)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00012a630)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a630)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc00012a630)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc00017c460, 0xc00014ef00)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc00017c460, 0xc00014ef00)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc00045a280, 0xc795c0, 0xc000070dc0)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 75 [semacquire]:
occamy    | sync.runtime_SemacquireMutex(0xc00000e594, 0xc000446000, 0x1)
occamy    |     /golang/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc00000e590)
occamy    |     /golang/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /golang/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc00036b600, 0xc000517658, 0x8, 0xc000508ce8)
occamy    |     /occamy/server/routers.go:55 +0x3d5
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc00031c420)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c420)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc00031c420)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00031c420)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c420)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00031c420)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c420)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00031c420)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c420)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc00031c420)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc0003187e0, 0xc000357100)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc0003187e0, 0xc000357100)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc00045a320, 0xc795c0, 0xc00030edc0)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 76 [semacquire]:
occamy    | sync.runtime_SemacquireMutex(0xc00000e594, 0xc000446000, 0x1)
occamy    |     /golang/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc00000e590)
occamy    |     /golang/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /golang/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc0001358c0, 0xc000187658, 0x8, 0xc00011d638)
occamy    |     /occamy/server/routers.go:55 +0x3d5
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc00012a4d0)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a4d0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc00012a4d0)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00012a4d0)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a4d0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00012a4d0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a4d0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00012a4d0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00012a4d0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc00012a4d0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc00017c380, 0xc00014ee00)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc00017c380, 0xc00014ee00)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc00045a3c0, 0xc795c0, 0xc000070cc0)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 77 [semacquire]:
occamy    | sync.runtime_SemacquireMutex(0xc00000e594, 0xc000446000, 0x1)
occamy    |     /golang/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc00000e590)
occamy    |     /golang/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /golang/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc00036b080, 0xc000369658, 0x8, 0xc0005088a8)
occamy    |     /occamy/server/routers.go:55 +0x3d5
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc00031c2c0)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c2c0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc00031c2c0)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00031c2c0)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c2c0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00031c2c0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c2c0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00031c2c0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00031c2c0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc00031c2c0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc000318700, 0xc000357000)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc000318700, 0xc000357000)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc00045a460, 0xc795c0, 0xc00030ecc0)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 78 [semacquire]:
occamy    | sync.runtime_SemacquireMutex(0xc00000e594, 0xc000446000, 0x1)
occamy    |     /golang/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc00000e590)
occamy    |     /golang/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /golang/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc0001f6b00, 0xc00031f658, 0x8, 0xc0001f8658)
occamy    |     /occamy/server/routers.go:55 +0x3d5
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc0001bc370)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc0001bc370)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0001bc370)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0001bc370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0001bc370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001bc370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc0001bc370)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc0001b6620, 0xc0001ae700)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc0001b6620, 0xc0001ae700)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc00045a500, 0xc795c0, 0xc0001928c0)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 79 [semacquire]:
occamy    | sync.runtime_SemacquireMutex(0xc00000e594, 0xc000446000, 0x1)
occamy    |     /golang/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc00000e590)
occamy    |     /golang/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /golang/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc000462000, 0xc0004f3658, 0x8, 0xc000423a98)
occamy    |     /occamy/server/routers.go:55 +0x3d5
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc00041c2c0)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00041c2c0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc00041c2c0)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00041c2c0)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00041c2c0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00041c2c0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00041c2c0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00041c2c0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00041c2c0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc00041c2c0)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc000418460, 0xc000440500)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc000418460, 0xc000440500)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc00045a5a0, 0xc795c0, 0xc00040e580)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 80 [semacquire]:
occamy    | sync.runtime_SemacquireMutex(0xc00000e594, 0xc000446000, 0x1)
occamy    |     /golang/go/src/runtime/sema.go:71 +0x47
occamy    | sync.(*Mutex).lockSlow(0xc00000e590)
occamy    |     /golang/go/src/sync/mutex.go:138 +0xfc
occamy    | sync.(*Mutex).Lock(...)
occamy    |     /golang/go/src/sync/mutex.go:81
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc00000e580, 0xc00040ba20, 0xc0003a7658, 0x8, 0xc000423618)
occamy    |     /occamy/server/routers.go:55 +0x3d5
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc00000e580, 0xc00041c160)
occamy    |     /occamy/server/routers.go:46 +0x447
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00041c160)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc00011c7e0, 0xc00041c160)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy    | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc00041c160)
occamy    |     /occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00041c160)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc00041c160)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x60
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00041c160)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00041c160)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc00041c160)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy    | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000136640, 0xc00041c160)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b0
occamy    | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000136640, 0xc77d40, 0xc000418380, 0xc000440400)
occamy    |     /occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x133
occamy    | net/http.serverHandler.ServeHTTP(0xc00017c0e0, 0xc77d40, 0xc000418380, 0xc000440400)
occamy    |     /golang/go/src/net/http/server.go:2807 +0xa3
occamy    | net/http.(*conn).serve(0xc00045a640, 0xc795c0, 0xc00040e480)
occamy    |     /golang/go/src/net/http/server.go:1895 +0x86c
occamy    | created by net/http.(*Server).Serve
occamy    |     /golang/go/src/net/http/server.go:2933 +0x35c
occamy    | 
occamy    | goroutine 134 [syscall]:
occamy    | github.com/changkun/occamy/lib._Cfunc_guac_user_input_thread(0x7fc07c004800, 0x7fc000e4e1c0)
occamy    |     _cgo_gotypes.go:497 +0x41
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection.func2(0xc000527980)
occamy    |     /occamy/lib/user.go:239 +0x5d
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection(0xc000527980, 0xc000310780)
occamy    |     /occamy/lib/user.go:239 +0x3d
occamy    | created by github.com/changkun/occamy/server.(*Session).Join
occamy    |     /occamy/server/session.go:93 +0x51a
occamy    | 
occamy    | goroutine 135 [syscall]:
occamy    | syscall.Syscall(0x0, 0x24, 0xc000534000, 0x2000, 0xc000416218, 0xc00009da80, 0xc00032d5a0)
occamy    |     /golang/go/src/syscall/asm_linux_amd64.s:18 +0x5
occamy    | syscall.read(0x24, 0xc000534000, 0x2000, 0x2000, 0x9e170b, 0xc0004161c0, 0xc591f4)
occamy    |     /golang/go/src/syscall/zsyscall_linux_amd64.go:686 +0x5a
occamy    | syscall.Read(...)
occamy    |     /golang/go/src/syscall/syscall_unix.go:189
occamy    | github.com/changkun/occamy/protocol.IO.Read(0x24, 0xc000534000, 0x2000, 0x2000, 0x2a, 0x0, 0x0)
occamy    |     /occamy/protocol/io.go:21 +0x49
occamy    | bufio.(*Reader).fill(0xc0003373e0)
occamy    |     /golang/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).ReadSlice(0xc0003373e0, 0x3b, 0x28, 0xc0001d0090, 0xc00040b4a0, 0xc00032d748, 0x9d8b67)
occamy    |     /golang/go/src/bufio/bufio.go:359 +0x3d
occamy    | bufio.(*Reader).ReadBytes(0xc0003373e0, 0x3b, 0xc0001d0090, 0x28, 0x28, 0x0, 0x0)
occamy    |     /golang/go/src/bufio/bufio.go:438 +0x7a
occamy    | github.com/changkun/occamy/protocol.(*InstructionIO).ReadRaw(...)
occamy    |     /occamy/protocol/instruction.go:156
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func1(0xc000337440, 0xc000308930, 0xc00030cde0, 0xc00040b4a0)
occamy    |     /occamy/server/session.go:119 +0x41
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:116 +0xbb
occamy    | 
occamy    | goroutine 136 [IO wait]:
occamy    | internal/poll.runtime_pollWait(0x7fc0ad8c0308, 0x72, 0xffffffffffffffff)
occamy    |     /golang/go/src/runtime/netpoll.go:203 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc00009da98, 0x72, 0x2000, 0x2000, 0xffffffffffffffff)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy    | internal/poll.(*pollDesc).waitRead(...)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:92
occamy    | internal/poll.(*FD).Read(0xc00009da80, 0xc00044a000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/internal/poll/fd_unix.go:169 +0x19b
occamy    | net.(*netFD).Read(0xc00009da80, 0xc00044a000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc000098570, 0xc00044a000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/net.go:184 +0x8e
occamy    | bufio.(*Reader).fill(0xc000426720)
occamy    |     /golang/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).Peek(0xc000426720, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/bufio/bufio.go:138 +0x4f
occamy    | github.com/gorilla/websocket.(*Conn).read(0xc00040b4a0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:357 +0x40
occamy    | github.com/gorilla/websocket.(*Conn).advanceFrame(0xc00040b4a0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:787 +0x5c
occamy    | github.com/gorilla/websocket.(*Conn).NextReader(0xc00040b4a0, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:947 +0x8f
occamy    | github.com/gorilla/websocket.(*Conn).ReadMessage(0xc00040b4a0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:1028 +0x2f
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func2(0xc000337440, 0xc000308930, 0xc00030cde0, 0xc00040b4a0)
occamy    |     /occamy/server/session.go:135 +0x3a
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:132 +0x101
occamy    | 
occamy    | goroutine 147 [syscall]:
occamy    | github.com/changkun/occamy/lib._Cfunc_guac_user_input_thread(0x7fc06c002a00, 0x7fc000e4e1c0)
occamy    |     _cgo_gotypes.go:497 +0x41
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection.func2(0xc0003c5980)
occamy    |     /occamy/lib/user.go:239 +0x5d
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection(0xc0003c5980, 0xc0002368a0)
occamy    |     /occamy/lib/user.go:239 +0x3d
occamy    | created by github.com/changkun/occamy/server.(*Session).Join
occamy    |     /occamy/server/session.go:93 +0x51a
occamy    | 
occamy    | goroutine 148 [runnable]:
occamy    | syscall.Syscall(0x1, 0x10, 0xc00001450a, 0xf0, 0xf0, 0xf0, 0x0)
occamy    |     /golang/go/src/syscall/asm_linux_amd64.s:18 +0x5
occamy    | syscall.write(0x10, 0xc00001450a, 0xf0, 0x2004, 0x0, 0x400, 0x203000)
occamy    |     /golang/go/src/syscall/zsyscall_linux_amd64.go:914 +0x5a
occamy    | syscall.Write(...)
occamy    |     /golang/go/src/syscall/syscall_unix.go:214
occamy    | internal/poll.(*FD).Write(0xc00016a900, 0xc00001450a, 0xf0, 0x2004, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/internal/poll/fd_unix.go:268 +0x179
occamy    | net.(*netFD).Write(0xc00016a900, 0xc00001450a, 0xf0, 0x2004, 0x0, 0x77, 0x0)
occamy    |     /golang/go/src/net/fd_unix.go:220 +0x4f
occamy    | net.(*conn).Write(0xc000010208, 0xc00001450a, 0xf0, 0x2004, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/net.go:196 +0x8e
occamy    | github.com/gorilla/websocket.(*Conn).write(0xc000135340, 0x1, 0x0, 0x0, 0x0, 0xc00001450a, 0xf0, 0x2004, 0xc000478000, 0x0, ...)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:378 +0x151
occamy    | github.com/gorilla/websocket.(*messageWriter).flushFrame(0xc000044f18, 0xc000478001, 0xc000478000, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:595 +0x25f
occamy    | github.com/gorilla/websocket.(*Conn).WriteMessage(0xc000135340, 0x1, 0xc000478000, 0xec, 0xec, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:752 +0x247
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func1(0xc00008f860, 0xc00024ad40, 0xc0003a03e0, 0xc000135340)
occamy    |     /occamy/server/session.go:123 +0x92
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:116 +0xbb
occamy    | 
occamy    | goroutine 149 [IO wait]:
occamy    | internal/poll.runtime_pollWait(0x7fc0ac03de08, 0x72, 0xffffffffffffffff)
occamy    |     /golang/go/src/runtime/netpoll.go:203 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc00016a918, 0x72, 0x2000, 0x2000, 0xffffffffffffffff)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy    | internal/poll.(*pollDesc).waitRead(...)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:92
occamy    | internal/poll.(*FD).Read(0xc00016a900, 0xc0002bc000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/internal/poll/fd_unix.go:169 +0x19b
occamy    | net.(*netFD).Read(0xc00016a900, 0xc0002bc000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc000010208, 0xc0002bc000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/net.go:184 +0x8e
occamy    | bufio.(*Reader).fill(0xc000073560)
occamy    |     /golang/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).Peek(0xc000073560, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/bufio/bufio.go:138 +0x4f
occamy    | github.com/gorilla/websocket.(*Conn).read(0xc000135340, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:357 +0x40
occamy    | github.com/gorilla/websocket.(*Conn).advanceFrame(0xc000135340, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:787 +0x5c
occamy    | github.com/gorilla/websocket.(*Conn).NextReader(0xc000135340, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:947 +0x8f
occamy    | github.com/gorilla/websocket.(*Conn).ReadMessage(0xc000135340, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:1028 +0x2f
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func2(0xc00008f860, 0xc00024ad40, 0xc0003a03e0, 0xc000135340)
occamy    |     /occamy/server/session.go:135 +0x3a
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:132 +0x101
occamy    | 
occamy    | goroutine 49 [IO wait]:
occamy    | internal/poll.runtime_pollWait(0x7fc0ad8c0768, 0x72, 0xffffffffffffffff)
occamy    |     /golang/go/src/runtime/netpoll.go:203 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc00009dc18, 0x72, 0x2000, 0x2000, 0xffffffffffffffff)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy    | internal/poll.(*pollDesc).waitRead(...)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:92
occamy    | internal/poll.(*FD).Read(0xc00009dc00, 0xc0001fa000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/internal/poll/fd_unix.go:169 +0x19b
occamy    | net.(*netFD).Read(0xc00009dc00, 0xc0001fa000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc000098588, 0xc0001fa000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/net.go:184 +0x8e
occamy    | bufio.(*Reader).fill(0xc000188ea0)
occamy    |     /golang/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).Peek(0xc000188ea0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/bufio/bufio.go:138 +0x4f
occamy    | github.com/gorilla/websocket.(*Conn).read(0xc0001f6580, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:357 +0x40
occamy    | github.com/gorilla/websocket.(*Conn).advanceFrame(0xc0001f6580, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:787 +0x5c
occamy    | github.com/gorilla/websocket.(*Conn).NextReader(0xc0001f6580, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:947 +0x8f
occamy    | github.com/gorilla/websocket.(*Conn).ReadMessage(0xc0001f6580, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:1028 +0x2f
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func2(0xc000189320, 0xc0001968b0, 0xc000190e60, 0xc0001f6580)
occamy    |     /occamy/server/session.go:135 +0x3a
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:132 +0x101
occamy    | 
occamy    | goroutine 150 [syscall]:
occamy    | github.com/changkun/occamy/lib._Cfunc_guac_user_input_thread(0x7fc05c000b90, 0x7fc000e4e1c0)
occamy    |     _cgo_gotypes.go:497 +0x41
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection.func2(0xc00059f980)
occamy    |     /occamy/lib/user.go:239 +0x5d
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection(0xc00059f980, 0xc0004b4000)
occamy    |     /occamy/lib/user.go:239 +0x3d
occamy    | created by github.com/changkun/occamy/server.(*Session).Join
occamy    |     /occamy/server/session.go:93 +0x51a
occamy    | 
occamy    | goroutine 151 [runnable]:
occamy    | syscall.Syscall(0x0, 0x2e, 0xc0003f0000, 0x2000, 0x2dd, 0x2000, 0x0)
occamy    |     /golang/go/src/syscall/asm_linux_amd64.s:18 +0x5
occamy    | syscall.read(0x2e, 0xc0003f0000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/syscall/zsyscall_linux_amd64.go:686 +0x5a
occamy    | syscall.Read(...)
occamy    |     /golang/go/src/syscall/syscall_unix.go:189
occamy    | github.com/changkun/occamy/protocol.IO.Read(0x2e, 0xc0003f0000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /occamy/protocol/io.go:21 +0x49
occamy    | bufio.(*Reader).fill(0xc0004a60c0)
occamy    |     /golang/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).ReadSlice(0xc0004a60c0, 0x3b, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/bufio/bufio.go:359 +0x3d
occamy    | bufio.(*Reader).ReadBytes(0xc0004a60c0, 0x3b, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/bufio/bufio.go:438 +0x7a
occamy    | github.com/changkun/occamy/protocol.(*InstructionIO).ReadRaw(...)
occamy    |     /occamy/protocol/instruction.go:156
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func1(0xc0004a6120, 0xc00002a090, 0xc00000e040, 0xc00036ab00)
occamy    |     /occamy/server/session.go:119 +0x41
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:116 +0xbb
occamy    | 
occamy    | goroutine 152 [IO wait]:
occamy    | internal/poll.runtime_pollWait(0x7fc0ad8c0148, 0x72, 0xffffffffffffffff)
occamy    |     /golang/go/src/runtime/netpoll.go:203 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc00009db98, 0x72, 0x2000, 0x2000, 0xffffffffffffffff)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy    | internal/poll.(*pollDesc).waitRead(...)
occamy    |     /golang/go/src/internal/poll/fd_poll_runtime.go:92
occamy    | internal/poll.(*FD).Read(0xc00009db80, 0xc00050c000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/internal/poll/fd_unix.go:169 +0x19b
occamy    | net.(*netFD).Read(0xc00009db80, 0xc00050c000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc000098580, 0xc00050c000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/net/net.go:184 +0x8e
occamy    | bufio.(*Reader).fill(0xc000336f00)
occamy    |     /golang/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).Peek(0xc000336f00, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /golang/go/src/bufio/bufio.go:138 +0x4f
occamy    | github.com/gorilla/websocket.(*Conn).read(0xc00036ab00, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:357 +0x40
occamy    | github.com/gorilla/websocket.(*Conn).advanceFrame(0xc00036ab00, 0x40b94b, 0xc000012000, 0x43947c)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:787 +0x5c
occamy    | github.com/gorilla/websocket.(*Conn).NextReader(0xc00036ab00, 0xc00032ef40, 0x44b2cf, 0xc000336360, 0x4, 0xc000336360)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:947 +0x8f
occamy    | github.com/gorilla/websocket.(*Conn).ReadMessage(0xc00036ab00, 0x7fc0ac079101, 0xc00032efc8, 0x6cb413, 0xc000192280, 0xc69e01, 0xc000304280)
occamy    |     /occamy/vendor/github.com/gorilla/websocket/conn.go:1028 +0x2f
occamy    | github.com/changkun/occamy/server.(*Session).serveIO.func2(0xc0004a6120, 0xc00002a090, 0xc00000e040, 0xc00036ab00)
occamy    |     /occamy/server/session.go:135 +0x3a
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /occamy/server/session.go:132 +0x101
occamy    | 
occamy    | rax    0x0
occamy    | rbx    0x7fc0dabb9000
occamy    | rcx    0x7fc0da1d8337
occamy    | rdx    0x6
occamy    | rdi    0x1
occamy    | rsi    0x1d
occamy    | rbp    0x7fc0da32cbe0
occamy    | rsp    0x7fc089ff7898
occamy    | r8     0x0
occamy    | r9     0x7fc05c006e30
occamy    | r10    0x8
occamy    | r11    0x202
occamy    | r12    0x7fc0d9f61fb1
occamy    | r13    0x7fc0d9f62340
occamy    | r14    0xc
occamy    | r15    0x7fc08c058800
occamy    | rip    0x7fc0da1d8337
occamy    | rflags 0x202
occamy    | cs     0x33
occamy    | fs     0x0
occamy    | gs     0x0