Giter Club home page Giter Club logo

occamy's Introduction

logo

Occamy

Latest relsease Build Status Go Report Card

Occamy is an open source protocol and proxy for modern remote desktop control that written in Go.

To start using Occamy

Build

Occamy support deployment with Docker or container orchestration tool, e.g. K8s. To build Occamy, you need:

git clone https://github.com/changkun/occamy.git
cd occamy
make build

Then you should be able to run occamy with:

docker run -itd occamy:latest

APIs

Occamy offers two APIs:

  • /api/v1/login distributes JWT tokens for authentication and
  • /api/v1/connect is used for WebSocket based Occamy connection.

If you build Occamy with web client, you can also access /static for web client demo.

Demo

To run a demo, you need build an occamy client first:

cd client/occamy-web
npm install && npm run build

With docker-compose, you should be able to run a working demo with:

make build
make run
make stop

Here is a working video demo:

IMAGE ALT TEXT

Contributing

Easiest way to contribute is to provide feedback! We would love to hear what you like and what you think is missing. PRs are welcome. Please follow the given PR template before you send your pull request.

Why Occamy and how it works?

Occamy implements a generic remote desktop protocol with modern approaches. It currently performs Guacamole protocol and eventually intends to redesign and propose Occamy protocol.

The benefits of Occamy that differ from Guacamole are:

  • Authentication supports
  • Simplified architecture
  • Streaming compression and optimization
  • Modern with Go

Occamy server side currently simplifies Guacamole proxy and Guacamole servlet client in a single middleware application. Any client that involves Guacamole protocol and uses WebSocket for authentication can directly switch to interact to Occamy without any changes.

Read more details in docs.

License

Occamy | MIT © 2019 Ou Changkun

occamy's People

Contributors

changkun avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

occamy's Issues

Cgo panic

Describe the bug
Occamy cgo wrap randomly panics when frequently connects to it.

To Reproduce

  1. make build && make run
  2. connect to VNC server
  3. refresh the page as fast as possible
  4. docker container may panics after several attempts.

Expected behavior
No panic

Additional context

occamy_1  | [GIN] 2019/11/04 - 07:24:29 | 200 |     80.3072ms |    172.16.238.1 | GET      /api/v1/connect?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzI4NTU1OTksImhvc3QiOiIxNzIuMTYuMjM4LjEwOjU5MDEiLCJvcmlnX2lhdCI6MTU3Mjg1MTk5OSwicGFzc3dvcmQiOiJ2bmNwYXNzd29yZCIsInByb3RvY29sIjoidm5jIiwidXNlcm5hbWUiOiIifQ.EwKyWk1OZOEk8unjFy61J48zpJagsfFqAx4n0PauMQ4
occamy_1  | occamy-lib[140426126268160]: User "@90384017-7b7a-4795-b731-170c6e4b8e66" disconnected (0 users remain)
occamy_1  | time="2019-11-04T07:24:29Z" level=info msg="occamy-lib: maximum log level: debug"
occamy_1  | time="2019-11-04T07:24:29Z" level=info msg="occamy-lib: create session success."
occamy_1  | time="2019-11-04T07:24:29Z" level=info msg="occamy-proxy: new session was created: $cda27806-98c2-4d69-8506-40150c6f55a2"
occamy_1  | occamy-lib[140427220190976]: Cursor rendering: local
occamy_1  | occamy-lib[140427220190976]: Parameter "swap-red-blue" omitted. Using default value of 0.
occamy_1  | occamy-lib[140427220190976]: Parameter "read-only" omitted. Using default value of 0.
occamy_1  | occamy-lib[140427220190976]: Parameter "color-depth" omitted. Using default value of 0.
occamy_1  | occamy-lib[140427220190976]: Parameter "dest-port" omitted. Using default value of 0.
occamy_1  | occamy-lib[140427220190976]: Parameter "encodings" omitted. Using default value of "zrle ultra copyrect hextile zlib corre rre raw".
occamy_1  | occamy-lib[140427220190976]: Parameter "autoretry" omitted. Using default value of 0.
occamy_1  | occamy-lib[140427220190976]: Parameter "reverse-connect" omitted. Using default value of 0.
occamy_1  | occamy-lib[140427220190976]: Parameter "listen-timeout" omitted. Using default value of 5000.
occamy_1  | occamy-lib[140427220190976]: Parameter "enable-audio" omitted. Using default value of 0.
occamy_1  | occamy-lib[140427220190976]: Parameter "enable-sftp" omitted. Using default value of 0.
occamy_1  | occamy-lib[140427220190976]: Parameter "sftp-hostname" omitted. Using default value of "172.16.238.10".
occamy_1  | occamy-lib[140427220190976]: Parameter "sftp-port" omitted. Using default value of "22".
occamy_1  | occamy-lib[140427220190976]: Parameter "sftp-username" omitted. Using default value of "".
occamy_1  | occamy-lib[140427220190976]: Parameter "sftp-password" omitted. Using default value of "".
occamy_1  | occamy-lib[140427220190976]: Parameter "sftp-passphrase" omitted. Using default value of "".
occamy_1  | occamy-lib[140427220190976]: Parameter "sftp-root-directory" omitted. Using default value of "/".
occamy_1  | occamy-lib[140427220190976]: Parameter "sftp-server-alive-interval" omitted. Using default value of 0.
occamy_1  | occamy-lib[140427220190976]: Parameter "recording-name" omitted. Using default value of "recording".
occamy_1  | occamy-lib[140427220190976]: Parameter "recording-exclude-output" omitted. Using default value of 0.
occamy_1  | occamy-lib[140427220190976]: Parameter "recording-exclude-mouse" omitted. Using default value of 0.
occamy_1  | occamy-lib[140427220190976]: Parameter "recording-include-keys" omitted. Using default value of 0.
occamy_1  | occamy-lib[140427220190976]: Parameter "create-recording-path" omitted. Using default value of 0.
occamy_1  | occamy-lib[140427220190976]: User "@be73c72d-a1f6-4f59-8ce8-f2bf0833b3e7" joined connection "$cda27806-98c2-4d69-8506-40150c6f55a2" (1 users now present)
occamy_1  | occamy-lib[140426718709504]: Internal VNC client disconnected
occamy_1  | [GIN] 2019/11/04 - 07:24:29 | 304 |        69.4µs |    172.16.238.1 | GET      /static/
occamy_1  | [GIN] 2019/11/04 - 07:24:29 | 200 |    201.6947ms |    172.16.238.1 | GET      /api/v1/connect?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzI4NTU1OTksImhvc3QiOiIxNzIuMTYuMjM4LjEwOjU5MDEiLCJvcmlnX2lhdCI6MTU3Mjg1MTk5OSwicGFzc3dvcmQiOiJ2bmNwYXNzd29yZCIsInByb3RvY29sIjoidm5jIiwidXNlcm5hbWUiOiIifQ.EwKyWk1OZOEk8unjFy61J48zpJagsfFqAx4n0PauMQ4
occamy_1  | occamy-lib[140427220190976]: User "@be73c72d-a1f6-4f59-8ce8-f2bf0833b3e7" disconnected (0 users remain)
occamy_1  | time="2019-11-04T07:24:30Z" level=info msg="occamy-lib: maximum log level: debug"
occamy_1  | time="2019-11-04T07:24:30Z" level=info msg="occamy-lib: create session success."
occamy_1  | time="2019-11-04T07:24:30Z" level=info msg="occamy-proxy: new session was created: $26771b9b-253a-49dd-9b9d-3c6987de5da6"
occamy_1  | occamy-lib[140426932754176]: Cursor rendering: local
occamy_1  | occamy-lib[140426932754176]: Parameter "swap-red-blue" omitted. Using default value of 0.
occamy_1  | occamy-lib[140426932754176]: Parameter "read-only" omitted. Using default value of 0.
occamy_1  | occamy-lib[140426932754176]: Parameter "color-depth" omitted. Using default value of 0.
occamy_1  | occamy-lib[140426932754176]: Parameter "dest-port" omitted. Using default value of 0.
occamy_1  | occamy-lib[140426932754176]: Parameter "encodings" omitted. Using default value of "zrle ultra copyrect hextile zlib corre rre raw".
occamy_1  | occamy-lib[140426932754176]: Parameter "autoretry" omitted. Using default value of 0.
occamy_1  | occamy-lib[140426932754176]: Parameter "reverse-connect" omitted. Using default value of 0.
occamy_1  | occamy-lib[140426932754176]: Parameter "listen-timeout" omitted. Using default value of 5000.
occamy_1  | occamy-lib[140426932754176]: Parameter "enable-audio" omitted. Using default value of 0.
occamy_1  | occamy-lib[140426932754176]: Parameter "enable-sftp" omitted. Using default value of 0.
occamy_1  | occamy-lib[140426932754176]: Parameter "sftp-hostname" omitted. Using default value of "172.16.238.10".
occamy_1  | occamy-lib[140426932754176]: Parameter "sftp-port" omitted. Using default value of "22".
occamy_1  | occamy-lib[140426932754176]: Parameter "sftp-username" omitted. Using default value of "".
occamy_1  | occamy-lib[140426932754176]: Parameter "sftp-password" omitted. Using default value of "".
occamy_1  | occamy-lib[140426932754176]: Parameter "sftp-passphrase" omitted. Using default value of "".
occamy_1  | occamy-lib[140426932754176]: Parameter "sftp-root-directory" omitted. Using default value of "/".
occamy_1  | occamy-lib[140426932754176]: Parameter "sftp-server-alive-interval" omitted. Using default value of 0.
occamy_1  | occamy-lib[140426932754176]: Parameter "recording-name" omitted. Using default value of "recording".
occamy_1  | occamy-lib[140426932754176]: Parameter "recording-exclude-output" omitted. Using default value of 0.
occamy_1  | occamy-lib[140426932754176]: Parameter "recording-exclude-mouse" omitted. Using default value of 0.
occamy_1  | occamy-lib[140426932754176]: Parameter "recording-include-keys" omitted. Using default value of 0.
occamy_1  | occamy-lib[140426932754176]: Parameter "create-recording-path" omitted. Using default value of 0.
occamy_1  | occamy-lib[140426932754176]: User "@21f395d6-9f15-4522-bf46-b988fdf89014" joined connection "$26771b9b-253a-49dd-9b9d-3c6987de5da6" (1 users now present)
occamy_1  | occamy-lib[140426170332928]: Internal VNC client disconnected
occamy_1  | occamy-lib[140426153547520]: Internal VNC client disconnected
occamy_1  | *** Error in `/go/src/github.com/changkun/occamy/occamyd': double free or corruption (out): 0x00007fb7980030c0 ***
occamy_1  | ======= Backtrace: =========
occamy_1  | /lib64/libc.so.6(+0x81679)[0x7fb7cab05679]
occamy_1  | /lib/libguac-client-vnc.so(guac_vnc_client_free_handler+0xc4)[0x7fb7c05c7054]
occamy_1  | /lib/libguac.so.16(guac_client_free+0x32)[0x7fb7cb075032]
occamy_1  | /go/src/github.com/changkun/occamy/occamyd[0x45c930]
occamy_1  | ======= Memory map: ========
occamy_1  | 00400000-0102b000 r-xp 00000000 08:01 3676642                            /go/src/github.com/changkun/occamy/occamyd
occamy_1  | 0122a000-0122b000 r--p 00c2a000 08:01 3676642                            /go/src/github.com/changkun/occamy/occamyd
occamy_1  | 0122b000-01275000 rw-p 00c2b000 08:01 3676642                            /go/src/github.com/changkun/occamy/occamyd
occamy_1  | 01275000-0129b000 rw-p 00000000 00:00 0
occamy_1  | 03018000-03039000 rw-p 00000000 00:00 0                                  [heap]
occamy_1  | c000000000-c004000000 rw-p 00000000 00:00 0
occamy_1  | 7fb75c000000-7fb75cb1a000 rw-p 00000000 00:00 0
occamy_1  | 7fb75cb1a000-7fb760000000 ---p 00000000 00:00 0
occamy_1  | 7fb760000000-7fb760021000 rw-p 00000000 00:00 0
occamy_1  | 7fb760021000-7fb764000000 ---p 00000000 00:00 0
occamy_1  | 7fb7667fd000-7fb7667fe000 ---p 00000000 00:00 0
occamy_1  | 7fb7667fe000-7fb766ffe000 rw-p 00000000 00:00 0
occamy_1  | 7fb766ffe000-7fb766fff000 ---p 00000000 00:00 0
occamy_1  | 7fb766fff000-7fb7677ff000 rw-p 00000000 00:00 0
occamy_1  | 7fb7677ff000-7fb767800000 ---p 00000000 00:00 0
occamy_1  | 7fb767800000-7fb768000000 rw-p 00000000 00:00 0
occamy_1  | 7fb768000000-7fb768b19000 rw-p 00000000 00:00 0
occamy_1  | 7fb768b19000-7fb76c000000 ---p 00000000 00:00 0
occamy_1  | 7fb76c000000-7fb76c021000 rw-p 00000000 00:00 0
occamy_1  | 7fb76c021000-7fb770000000 ---p 00000000 00:00 0
occamy_1  | 7fb770000000-7fb770021000 rw-p 00000000 00:00 0
occamy_1  | 7fb770021000-7fb774000000 ---p 00000000 00:00 0
occamy_1  | 7fb774000000-7fb774042000 rw-p 00000000 00:00 0
occamy_1  | 7fb774042000-7fb778000000 ---p 00000000 00:00 0
occamy_1  | 7fb778000000-7fb7780c2000 rw-p 00000000 00:00 0
occamy_1  | 7fb7780c2000-7fb77c000000 ---p 00000000 00:00 0
occamy_1  | 7fb77c000000-7fb77c021000 rw-p 00000000 00:00 0
occamy_1  | 7fb77c021000-7fb780000000 ---p 00000000 00:00 0
occamy_1  | 7fb7805f8000-7fb7805f9000 ---p 00000000 00:00 0
occamy_1  | 7fb7805f9000-7fb780df9000 rw-p 00000000 00:00 0
occamy_1  | 7fb780df9000-7fb780dfa000 ---p 00000000 00:00 0
occamy_1  | 7fb780dfa000-7fb7815fa000 rw-p 00000000 00:00 0
occamy_1  | 7fb7815fa000-7fb7815fb000 ---p 00000000 00:00 0
occamy_1  | 7fb7815fb000-7fb7822fc000 rw-p 00000000 00:00 0
occamy_1  | 7fb7827fd000-7fb7827fe000 ---p 00000000 00:00 0
occamy_1  | 7fb7827fe000-7fb782ffe000 rw-p 00000000 00:00 0
occamy_1  | 7fb782ffe000-7fb782fff000 ---p 00000000 00:00 0
occamy_1  | 7fb782fff000-7fb7837ff000 rw-p 00000000 00:00 0
occamy_1  | 7fb7837ff000-7fb783800000 ---p 00000000 00:00 0
occamy_1  | 7fb783800000-7fb784000000 rw-p 00000000 00:00 0
occamy_1  | 7fb784000000-7fb784021000 rw-p 00000000 00:00 0
occamy_1  | 7fb784021000-7fb788000000 ---p 00000000 00:00 0
occamy_1  | 7fb788000000-7fb788021000 rw-p 00000000 00:00 0
occamy_1  | 7fb788021000-7fb78c000000 ---p 00000000 00:00 0
occamy_1  | 7fb78c000000-7fb78c062000 rw-p 00000000 00:00 0
occamy_1  | 7fb78c062000-7fb790000000 ---p 00000000 00:00 0
occamy_1  | 7fb7903f7000-7fb7903f8000 ---p 00000000 00:00 0
occamy_1  | 7fb7903f8000-7fb790bf8000 rw-p 00000000 00:00 0
occamy_1  | 7fb7915fa000-7fb7915fb000 ---p 00000000 00:00 0
occamy_1  | 7fb7915fb000-7fb791dfb000 rw-p 00000000 00:00 0
occamy_1  | 7fb791dfb000-7fb791dfc000 ---p 00000000 00:00 0
occamy_1  | 7fb791dfc000-7fb7925fc000 rw-p 00000000 00:00 0
occamy_1  | 7fb7925fc000-7fb7925fd000 ---p 00000000 00:00 0
occamy_1  | 7fb7925fd000-7fb792dfd000 rw-p 00000000 00:00 0
occamy_1  | 7fb792dfd000-7fb792dfe000 ---p 00000000 00:00 0
occamy_1  | 7fb792dfe000-7fb7935fe000 rw-p 00000000 00:00 0
occamy_1  | 7fb7937ff000-7fb793800000 ---p 00000000 00:00 0
occamy_1  | 7fb793800000-7fb794000000 rw-p 00000000 00:00 0
occamy_1  | 7fb794000000-7fb794021000 rw-p 00000000 00:00 0
occamy_1  | 7fb794021000-7fb798000000 ---p 00000000 00:00 0
occamy_1  | 7fb798000000-7fb798b93000 rw-p 00000000 00:00 0
occamy_1  | 7fb798b93000-7fb79c000000 ---p 00000000 00:00 0
occamy_1  | 7fb79c000000-7fb79cb35000 rw-p 00000000 00:00 0
occamy_1  | 7fb79cb35000-7fb7a0000000 ---p 00000000 00:00 0
occamy_1  | 7fb7a0000000-7fb7a0052000 rw-p 00000000 00:00 0
occamy_1  | 7fb7a0052000-7fb7a4000000 ---p 00000000 00:00 0
occamy_1  | 7fb7a42f8000-7fb7a42f9000 ---p 00000000 00:00 0
occamy_1  | 7fb7a42f9000-7fb7a4af9000 rw-p 00000000 00:00 0
occamy_1  | 7fb7a4af9000-7fb7a4afa000 ---p 00000000 00:00 0
occamy_1  | 7fb7a4afa000-7fb7a52fa000 rw-p 00000000 00:00 0
occamy_1  | 7fb7a52fa000-7fb7a52fb000 ---p 00000000 00:00 0
occamy_1  | 7fb7a52fb000-7fb7a5afb000 rw-p 00000000 00:00 0
occamy_1  | 7fb7a5ffc000-7fb7a5ffd000 ---p 00000000 00:00 0
occamy_1  | 7fb7a5ffd000-7fb7a67fd000 rw-p 00000000 00:00 0
occamy_1  | 7fb7a67fd000-7fb7a67fe000 ---p 00000000 00:00 0
occamy_1  | 7fb7a67fe000-7fb7a6ffe000 rw-p 00000000 00:00 0
occamy_1  | 7fb7a6ffe000-7fb7a6fff000 ---p 00000000 00:00 0
occamy_1  | 7fb7a6fff000-7fb7a77ff000 rw-p 00000000 00:00 0
occamy_1  | 7fb7a77ff000-7fb7a7800000 ---p 00000000 00:00 0
occamy_1  | 7fb7a7800000-7fb7a8000000 rw-p 00000000 00:00 0
occamy_1  | 7fb7a8000000-7fb7a8021000 rw-p 00000000 00:00 0
occamy_1  | 7fb7a8021000-7fb7ac000000 ---p 00000000 00:00 0
occamy_1  | 7fb7ac000000-7fb7ac021000 rw-p 00000000 00:00 0
occamy_1  | 7fb7ac021000-7fb7b0000000 ---p 00000000 00:00 0
occamy_1  | 7fb7b011e000-7fb7b015f000 rw-p 00000000 00:00 0
occamy_1  | 7fb7b0718000-7fb7b0719000 ---p 00000000 00:00 0
occamy_1  | 7fb7b0719000-7fb7b0f19000 rw-p 00000000 00:00 0
occamy_1  | 7fb7b0f19000-7fb7b0f1a000 ---p 00000000 00:00 0
occamy_1  | 7fb7b0f1a000-7fb7b171a000 rw-p 00000000 00:00 0
occamy_1  | 7fb7b171a000-7fb7b1731000 r-xp 00000000 08:01 138393                     /usr/lib64/libelf-0.176.so
occamy_1  | 7fb7b1731000-7fb7b1930000 ---p 00017000 08:01 138393                     /usr/lib64/libelf-0.176.so
occamy_1  | 7fb7b1930000-7fb7b1931000 r--p 00016000 08:01 138393                     /usr/lib64/libelf-0.176.so
occamy_1  | 7fb7b1931000-7fb7b1932000 rw-p 00017000 08:01 138393                     /usr/lib64/libelf-0.176.so
occamy_1  | 7fb7b1932000-7fb7b1938000 r-xp 00000000 08:01 138620                     /usr/lib64/libogg.so.0.8.0
occamy_1  | 7fb7b1938000-7fb7b1b37000 ---p 00006000 08:01 138620                     /usr/lib64/libogg.so.0.8.0
occamy_1  | 7fb7b1b37000-7fb7b1b38000 r--p 00005000 08:01 138620                     /usr/lib64/libogg.so.0.8.0
occamy_1  | 7fb7b1b38000-7fb7b1b39000 rw-p 00006000 08:01 138620                     /usr/lib64/libogg.so.0.8.0
occamy_1  | 7fb7b1b39000-7fb7b1b65000 r-xp 00000000 08:01 138766                     /usr/lib64/libvorbis.so.0.4.6
occamy_1  | 7fb7b1b65000-7fb7b1d64000 ---p 0002c000 08:01 138766                     /usr/lib64/libvorbis.so.0.4.6
occamy_1  | 7fb7b1d64000-7fb7b1d65000 r--p 0002b000 08:01 138766                     /usr/lib64/libvorbis.so.0.4.6
occamy_1  | 7fb7b1d65000-7fb7b1d66000 rw-p 0002c000 08:01 138766                     /usr/lib64/libvorbis.so.0.4.6
occamy_1  | 7fb7b1d66000-7fb7b2019000 r-xp 00000000 08:01 138768                     /usr/lib64/libvorbisenc.so.2.0.9
occamy_1  | 7fb7b2019000-7fb7b2218000 ---p 002b3000 08:01 138768                     /usr/lib64/libvorbisenc.so.2.0.9
occamy_1  | 7fb7b2218000-7fb7b2234000 r--p 002b2000 08:01 138768                     /usr/lib64/libvorbisenc.so.2.0.9
occamy_1  | 7fb7b2234000-7fb7b2235000 rw-p 002ce000 08:01 138768                     /usr/lib64/libvorbisenc.so.2.0.9
occamy_1  | 7fb7b2235000-7fb7b2278000 r-xp 00000000 08:01 138223                     /usr/lib64/libFLAC.so.8.3.0
occamy_1  | 7fb7b2278000-7fb7b2478000 ---p 00043000 08:01 138223                     /usr/lib64/libFLAC.so.8.3.0
occamy_1  | 7fb7b2478000-7fb7b2479000 r--p 00043000 08:01 138223                     /usr/lib64/libFLAC.so.8.3.0
occamy_1  | 7fb7b2479000-7fb7b247a000 rw-p 00044000 08:01 138223                     /usr/lib64/libFLAC.so.8.3.0
occamy_1  | 7fb7b247a000-7fb7b2485000 r-xp 00000000 08:01 138453                     /usr/lib64/libgsm.so.1.0.12
occamy_1  | 7fb7b2485000-7fb7b2684000 ---p 0000b000 08:01 138453                     /usr/lib64/libgsm.so.1.0.12
occamy_1  | 7fb7b2684000-7fb7b2685000 r--p 0000a000 08:01 138453                     /usr/lib64/libgsm.so.1.0.12
occamy_1  | 7fb7b2685000-7fb7b2686000 rw-p 0000b000 08:01 138453                     /usr/lib64/libgsm.so.1.0.12
occamy_1  | 7fb7b2686000-7fb7b269c000 r-xp 00000000 08:01 138585                     /usr/lib64/libnsl-2.17.so
occamy_1  | 7fb7b269c000-7fb7b289c000 ---p 00016000 08:01 138585                     /usr/lib64/libnsl-2.17.so
occamy_1  | 7fb7b289c000-7fb7b289d000 r--p 00016000 08:01 138585                     /usr/lib64/libnsl-2.17.so
occamy_1  | 7fb7b289d000-7fb7b289e000 rw-p 00017000 08:01 138585                     /usr/lib64/libnsl-2.17.so
occamy_1  | 7fb7b289e000-7fb7b28a0000 rw-p 00000000 00:00 0
occamy_1  | 7fb7b28a0000-7fb7b28b5000 r-xp 00000000 08:01 138422                     /usr/lib64/libgcc_s-4.8.5-20150702.so.1
occamy_1  | 7fb7b28b5000-7fb7b2ab4000 ---p 00015000 08:01 138422                     /usr/lib64/libgcc_s-4.8.5-20150702.so.1
occamy_1  | 7fb7b2ab4000-7fb7b2ab5000 r--p 00014000 08:01 138422                     /usr/lib64/libgcc_s-4.8.5-20150702.so.1
occamy_1  | 7fb7b2ab5000-7fb7b2ab6000 rw-p 00015000 08:01 138422                     /usr/lib64/libgcc_s-4.8.5-20150702.so.1
occamy_1  | 7fb7b2ab6000-7fb7b2b04000 r-xp 00000000 08:01 138388                     /usr/lib64/libdw-0.176.so
occamy_1  | 7fb7b2b04000-7fb7b2d04000 ---p 0004e000 08:01 138388                     /usr/lib64/libdw-0.176.so
occamy_1  | 7fb7b2d04000-7fb7b2d06000 r--p 0004e000 08:01 138388                     /usr/lib64/libdw-0.176.so
occamy_1  | 7fb7b2d06000-7fb7b2d07000 rw-p 00050000 08:01 138388                     /usr/lib64/libdw-0.176.so
occamy_1  | 7fb7b2d07000-7fb7b2d1b000 r-xp 00000000 08:01 138568                     /usr/lib64/liblz4.so.1.7.5
occamy_1  | 7fb7b2d1b000-7fb7b2f1a000 ---p 00014000 08:01 138568                     /usr/lib64/liblz4.so.1.7.5
occamy_1  | 7fb7b2f1a000-7fb7b2f1b000 r--p 00013000 08:01 138568                     /usr/lib64/liblz4.so.1.7.5
occamy_1  | 7fb7b2f1b000-7fb7b2f1c000 rw-p 00014000 08:01 138568                     /usr/lib64/liblz4.so.1.7.5
occamy_1  | 7fb7b2f1c000-7fb7b2f41000 r-xp 00000000 08:01 3411053                    /usr/lib64/liblzma.so.5.2.2
occamy_1  | 7fb7b2f41000-7fb7b3140000 ---p 00025000 08:01 3411053                    /usr/lib64/liblzma.so.5.2.2
occamy_1  | 7fb7b3140000-7fb7b3141000 r--p 00024000 08:01 3411053                    /usr/lib64/liblzma.so.5.2.2
occamy_1  | 7fb7b3141000-7fb7b3142000 rw-p 00025000 08:01 3411053                    /usr/lib64/liblzma.so.5.2.2
occamy_1  | 7fb7b3142000-7fb7b3151000 r-xp 00000000 08:01 138274                     /usr/lib64/libXi.so.6.1.0
occamy_1  | 7fb7b3151000-7fb7b3350000 ---p 0000f000 08:01 138274                     /usr/lib64/libXi.so.6.1.0
occamy_1  | 7fb7b3350000-7fb7b3351000 r--p 0000e000 08:01 138274                     /usr/lib64/libXi.so.6.1.0
occamy_1  | 7fb7b3351000-7fb7b3352000 rw-p 0000f000 08:01 138274                     /usr/lib64/libXi.so.6.1.0
occamy_1  | 7fb7b3352000-7fb7b3359000 r-xp 00000000 08:01 3410978                    /usr/lib64/libffi.so.6.0.1
occamy_1  | 7fb7b3359000-7fb7b3558000 ---p 00007000 08:01 3410978                    /usr/lib64/libffi.so.6.0.1
occamy_1  | 7fb7b3558000-7fb7b3559000 r--p 00006000 08:01 3410978                    /usr/lib64/libffi.so.6.0.1
occamy_1  | 7fb7b3559000-7fb7b355a000 rw-p 00007000 08:01 3410978                    /usr/lib64/libffi.so.6.0.1
occamy_1  | 7fb7b355a000-7fb7b355e000 r-xp 00000000 08:01 3410930                    /usr/lib64/libattr.so.1.1.0
occamy_1  | 7fb7b355e000-7fb7b375d000 ---p 00004000 08:01 3410930                    /usr/lib64/libattr.so.1.1.0
occamy_1  | 7fb7b375d000-7fb7b375e000 r--p 00003000 08:01 3410930                    /usr/lib64/libattr.so.1.1.0
occamy_1  | 7fb7b375e000-7fb7b375f000 rw-p 00004000 08:01 3410930                    /usr/lib64/libattr.so.1.1.0
occamy_1  | 7fb7b375f000-7fb7b3764000 r-xp 00000000 08:01 138310                     /usr/lib64/libasyncns.so.0.3.1
occamy_1  | 7fb7b3764000-7fb7b3963000 ---p 00005000 08:01 138310                     /usr/lib64/libasyncns.so.0.3.1
occamy_1  | 7fb7b3963000-7fb7b3964000 r--p 00004000 08:01 138310                     /usr/lib64/libasyncns.so.0.3.1
occamy_1  | 7fb7b3964000-7fb7b3965000 rw-p 00005000 08:01 138310                     /usr/lib64/libasyncns.so.0.3.1
occamy_1  | 7fb7b3965000-7fb7b39bd000 r-xp 00000000 08:01 138704                     /usr/lib64/libsndfile.so.1.0.25
occamy_1  | 7fb7b39bd000-7fb7b3bbd000 ---p 00058000 08:01 138704                     /usr/lib64/libsndfile.so.1.0.25
occamy_1  | 7fb7b3bbd000-7fb7b3bbf000 r--p 00058000 08:01 138704                     /usr/lib64/libsndfile.so.1.0.25
occamy_1  | 7fb7b3bbf000-7fb7b3bc0000 rw-p 0005a000 08:01 138704                     /usr/lib64/libsndfile.so.1.0.25
occamy_1  | 7fb7b3bc0000-7fb7b3bc4000 rw-p 00000000 00:00 0
occamy_1  | 7fb7b3bc4000-7fb7b3bcd000 r-xp 00000000 08:01 138796                     /usr/lib64/libwrap.so.0.7.6
occamy_1  | 7fb7b3bcd000-7fb7b3dcc000 ---p 00009000 08:01 138796                     /usr/lib64/libwrap.so.0.7.6
occamy_1  | 7fb7b3dcc000-7fb7b3dcd000 r--p 00008000 08:01 138796                     /usr/lib64/libwrap.so.0.7.6
occamy_1  | 7fb7b3dcd000-7fb7b3dce000 rw-p 00009000 08:01 138796                     /usr/lib64/libwrap.so.0.7.6
occamy_1  | 7fb7b3dce000-7fb7b3dcf000 rw-p 00000000 00:00 0
occamy_1  | 7fb7b3dcf000-7fb7b3dfe000 r-xp 00000000 08:01 138725                     /usr/lib64/libsystemd.so.0.6.0
occamy_1  | 7fb7b3dfe000-7fb7b3ffe000 ---p 0002f000 08:01 138725                     /usr/lib64/libsystemd.so.0.6.0
occamy_1  | 7fb7b3ffe000-7fb7b3fff000 r--p 0002f000 08:01 138725                     /usr/lib64/libsystemd.so.0.6.0
occamy_1  | 7fb7b3fff000-7fb7b4000000 rw-p 00030000 08:01 138725                     /usr/lib64/libsystemd.so.0.6.0
occamy_1  | 7fb7b4000000-7fb7b4021000 rw-p 00000000 00:00 0
occamy_1  | 7fb7b4021000-7fb7b8000000 ---p 00000000 00:00 0
occamy_1  | 7fb7b80d7000-7fb7b80dc000 r-xp 00000000 08:01 138289                     /usr/lib64/libXtst.so.6.1.0
occamy_1  | 7fb7b80dc000-7fb7b82db000 ---p 00005000 08:01 138289                     /usr/lib64/libXtst.so.6.1.0
occamy_1  | 7fb7b82db000-7fb7b82dc000 r--p 00004000 08:01 138289                     /usr/lib64/libXtst.so.6.1.0
occamy_1  | 7fb7b82dc000-7fb7b82dd000 rw-p 00005000 08:01 138289                     /usr/lib64/libXtst.so.6.1.0
occamy_1  | 7fb7b82dd000-7fb7b82e4000 r-xp 00000000 08:01 138248                     /usr/lib64/libSM.so.6.0.1
occamy_1  | 7fb7b82e4000-7fb7b84e3000 ---p 00007000 08:01 138248                     /usr/lib64/libSM.so.6.0.1
occamy_1  | 7fb7b84e3000-7fb7b84e4000 r--p 00006000 08:01 138248                     /usr/lib64/libSM.so.6.0.1
occamy_1  | 7fb7b84e4000-7fb7b84e5000 rw-p 00007000 08:01 138248                     /usr/lib64/libSM.so.6.0.1
occamy_1  | 7fb7b84e5000-7fb7b84fc000 r-xp 00000000 08:01 138243                     /usr/lib64/libICE.so.6.3.0
occamy_1  | 7fb7b84fc000-7fb7b86fb000 ---p 00017000 08:01 138243                     /usr/lib64/libICE.so.6.3.0
occamy_1  | 7fb7b86fb000-7fb7b86fc000 r--p 00016000 08:01 138243                     /usr/lib64/libICE.so.6.3.0
occamy_1  | 7fb7b86fc000-7fb7b86fd000 rw-p 00017000 08:01 138243                     /usr/lib64/libICE.so.6.3.0
occamy_1  | 7fb7b86fd000-7fb7b8701000 rw-p 00000000 00:00 0
occamy_1  | 7fb7b8701000-7fb7b8702000 r-xp 00000000 08:01 138252                     /usr/lib64/libX11-xcb.so.1.0.0
occamy_1  | 7fb7b8702000-7fb7b8901000 ---p 00001000 08:01 138252                     /usr/lib64/libX11-xcb.so.1.0.0
occamy_1  | 7fb7b8901000-7fb7b8902000 r--p 00000000 08:01 138252                     /usr/lib64/libX11-xcb.so.1.0.0
occamy_1  | 7fb7b8902000-7fb7b8903000 rw-p 00001000 08:01 138252                     /usr/lib64/libX11-xcb.so.1.0.0
occamy_1  | 7fb7b8903000-7fb7b8979000 r-xp 00000000 08:01 3411004                    /usr/lib64/libgmp.so.10.2.0
occamy_1  | 7fb7b8979000-7fb7b8b78000 ---p 00076000 08:01 3411004                    /usr/lib64/libgmp.so.10.2.0
occamy_1  | 7fb7b8b78000-7fb7b8b7a000 r--p 00075000 08:01 3411004                    /usr/lib64/libgmp.so.10.2.0
occamy_1  | 7fb7b8b7a000-7fb7b8b7b000 rw-p 00077000 08:01 3411004                    /usr/lib64/libgmp.so.10.2.0
occamy_1  | 7fb7b8b7b000-7fb7b8ba1000 r-xp 00000000 08:01 138504                     /usr/lib64/libhogweed.so.2.5
occamy_1  | 7fb7b8ba1000-7fb7b8da0000 ---p 00026000 08:01 138504                     /usr/lib64/libhogweed.so.2.5
occamy_1  | 7fb7b8da0000-7fb7b8da1000 r--p 00025000 08:01 138504                     /usr/lib64/libhogweed.so.2.5
occamy_1  | 7fb7b8da1000-7fb7b8da2000 rw-p 00026000 08:01 138504                     /usr/lib64/libhogweed.so.2.5
occamy_1  | 7fb7b8da2000-7fb7b8dd1000 r-xp 00000000 08:01 138584                     /usr/lib64/libnettle.so.4.7
occamy_1  | 7fb7b8dd1000-7fb7b8fd1000 ---p 0002f000 08:01 138584                     /usr/lib64/libnettle.so.4.7
occamy_1  | 7fb7b8fd1000-7fb7b8fd2000 r--p 0002f000 08:01 138584                     /usr/lib64/libnettle.so.4.7
occamy_1  | 7fb7b8fd2000-7fb7b8fd3000 rw-p 00030000 08:01 138584                     /usr/lib64/libnettle.so.4.7
occamy_1  | 7fb7b8fd3000-7fb7b8fe4000 r-xp 00000000 08:01 3411184                    /usr/lib64/libtasn1.so.6.5.3
occamy_1  | 7fb7b8fe4000-7fb7b91e4000 ---p 00011000 08:01 3411184                    /usr/lib64/libtasn1.so.6.5.3
occamy_1  | 7fb7b91e4000-7fb7b91e5000 r--p 00011000 08:01 3411184                    /usr/lib64/libtasn1.so.6.5.3
occamy_1  | 7fb7b91e5000-7fb7b91e6000 rw-p 00012000 08:01 3411184                    /usr/lib64/libtasn1.so.6.5.3
occamy_1  | 7fb7b91e6000-7fb7b9300000 r-xp 00000000 08:01 3411101                    /usr/lib64/libp11-kit.so.0.3.0
occamy_1  | 7fb7b9300000-7fb7b9500000 ---p 0011a000 08:01 3411101                    /usr/lib64/libp11-kit.so.0.3.0
occamy_1  | 7fb7b9500000-7fb7b950a000 r--p 0011a000 08:01 3411101                    /usr/lib64/libp11-kit.so.0.3.0
occamy_1  | 7fb7b950a000-7fb7b9514000 rw-p 00124000 08:01 3411101                    /usr/lib64/libp11-kit.so.0.3.0
occamy_1  | 7fb7b9514000-7fb7b9515000 rw-p 00000000 00:00 0
occamy_1  | 7fb7b9515000-7fb7b9519000 r-xp 00000000 08:01 3411010                    /usr/lib64/libgpg-error.so.0.10.0
occamy_1  | 7fb7b9519000-7fb7b9718000 ---p 00004000 08:01 3411010                    /usr/lib64/libgpg-error.so.0.10.0
occamy_1  | 7fb7b9718000-7fb7b9719000 r--p 00003000 08:01 3411010                    /usr/lib64/libgpg-error.so.0.10.0
occamy_1  | 7fb7b9719000-7fb7b971a000 rw-p 00004000 08:01 3411010                    /usr/lib64/libgpg-error.so.0.10.0
occamy_1  | 7fb7b971a000-7fb7b971e000 r-xp 00000000 08:01 138336                     /usr/lib64/libcap.so.2.22
occamy_1  | 7fb7b971e000-7fb7b991d000 ---p 00004000 08:01 138336                     /usr/lib64/libcap.so.2.22
occamy_1  | 7fb7b991d000-7fb7b991e000 r--p 00003000 08:01 138336                     /usr/lib64/libcap.so.2.22
occamy_1  | 7fb7b991e000-7fb7b991f000 rw-p 00004000 08:01 138336                     /usr/lib64/libcap.so.2.22
occamy_1  | 7fb7b991f000-7fb7b996d000 r-xp 00000000 08:01 3410965                    /usr/lib64/libdbus-1.so.3.14.14
occamy_1  | 7fb7b996d000-7fb7b9b6c000 ---p 0004e000 08:01 3410965                    /usr/lib64/libdbus-1.so.3.14.14
occamy_1  | 7fb7b9b6c000-7fb7b9b6d000 r--p 0004d000 08:01 3410965                    /usr/lib64/libdbus-1.so.3.14.14
occamy_1  | 7fb7b9b6d000-7fb7b9b6e000 rw-p 0004e000 08:01 3410965                    /usr/lib64/libdbus-1.so.3.14.14
occamy_1  | 7fb7b9b6e000-7fb7b9b6f000 rw-p 00000000 00:00 0
occamy_1  | 7fb7b9b6f000-7fb7b9bec000 r-xp 00000000 08:01 263597                     /usr/lib64/pulseaudio/libpulsecommon-10.0.so
occamy_1  | 7fb7b9bec000-7fb7b9dec000 ---p 0007d000 08:01 263597                     /usr/lib64/pulseaudio/libpulsecommon-10.0.so
occamy_1  | 7fb7b9dec000-7fb7b9dee000 r--p 0007d000 08:01 263597                     /usr/lib64/pulseaudio/libpulsecommon-10.0.so
occamy_1  | 7fb7b9dee000-7fb7b9def000 rw-p 0007f000 08:01 263597                     /usr/lib64/pulseaudio/libpulsecommon-10.0.so
occamy_1  | 7fb7b9def000-7fb7b9f1d000 r-xp 00000000 08:01 138441                     /usr/lib64/libgnutls.so.28.43.3
occamy_1  | 7fb7b9f1d000-7fb7ba11c000 ---p 0012e000 08:01 138441                     /usr/lib64/libgnutls.so.28.43.3
occamy_1  | 7fb7ba11c000-7fb7ba126000 r--p 0012d000 08:01 138441                     /usr/lib64/libgnutls.so.28.43.3
occamy_1  | 7fb7ba126000-7fb7ba128000 rw-p 00137000 08:01 138441                     /usr/lib64/libgnutls.so.28.43.3
occamy_1  | 7fb7ba128000-7fb7ba129000 rw-p 00000000 00:00 0
occamy_1  | 7fb7ba129000-7fb7ba1a6000 r-xp 00000000 08:01 3410990                    /usr/lib64/libgcrypt.so.11.8.2
occamy_1  | 7fb7ba1a6000-7fb7ba3a5000 ---p 0007d000 08:01 3410990                    /usr/lib64/libgcrypt.so.11.8.2
occamy_1  | 7fb7ba3a5000-7fb7ba3a6000 r--p 0007c000 08:01 3410990                    /usr/lib64/libgcrypt.so.11.8.2
occamy_1  | 7fb7ba3a6000-7fb7ba3a9000 rw-p 0007d000 08:01 3410990                    /usr/lib64/libgcrypt.so.11.8.2
occamy_1  | 7fb7ba3a9000-7fb7ba3aa000 rw-p 00000000 00:00 0
occamy_1  | 7fb7ba3aa000-7fb7ba3ad000 r-xp 00000000 08:01 138576                     /usr/lib64/libminilzo.so.0
occamy_1  | 7fb7ba3ad000-7fb7ba5ac000 ---p 00003000 08:01 138576                     /usr/lib64/libminilzo.so.0
occamy_1  | 7fb7ba5ac000-7fb7ba5ad000 r--p 00002000 08:01 138576                     /usr/lib64/libminilzo.so.0
occamy_1  | 7fb7ba5ad000-7fb7ba5ae000 rw-p 00003000 08:01 138576                     /usr/lib64/libminilzo.so.0
occamy_1  | 7fb7ba5ae000-7fb7ba5fa000 r-xp 00000000 08:01 138679                     /usr/lib64/libpulse.so.0.20.1
occamy_1  | 7fb7ba5fa000-7fb7ba7fa000 ---p 0004c000 08:01 138679                     /usr/lib64/libpulse.so.0.20.1
occamy_1  | 7fb7ba7fa000-7fb7ba7fc000 r--p 0004c000 08:01 138679                     /usr/lib64/libpulse.so.0.20.1
occamy_1  | 7fb7ba7fc000-7fb7ba7fd000 rw-p 0004e000 08:01 138679                     /usr/lib64/libpulse.so.0.20.1
occamy_1  | 7fb7ba7fd000-7fb7ba7fe000 ---p 00000000 00:00 0
occamy_1  | 7fb7ba7fe000-7fb7baffe000 rw-p 00000000 00:00 0
occamy_1  | 7fb7baffe000-7fb7bafff000 ---p 00000000 00:00 0
occamy_1  | 7fb7bafff000-7fb7bb7ff000 rw-p 00000000 00:00 0
occamy_1  | 7fb7bb7ff000-7fb7bb800000 ---p 00000000 00:00 0
occamy_1  | 7fb7bb800000-7fb7bc000000 rw-p 00000000 00:00 0
occamy_1  | 7fb7bc000000-7fb7bc03c000 rw-p 00000000 00:00 0
occamy_1  | 7fb7bc03c000-7fb7c0000000 ---p 00000000 00:00 0
occamy_1  | 7fb7c00d4000-7fb7c0114000 rw-p 00000000 00:00 0
occamy_1  | 7fb7c0174000-7fb7c019f000 r-xp 00000000 08:01 138709                     /usr/lib64/libssh2.so.1.0.1
occamy_1  | 7fb7c019f000-7fb7c039f000 ---p 0002b000 08:01 138709                     /usr/lib64/libssh2.so.1.0.1
occamy_1  | 7fb7c039f000-7fb7c03a0000 r--p 0002b000 08:01 138709                     /usr/lib64/libssh2.so.1.0.1
occamy_1  | 7fb7c03a0000-7fb7c03a1000 rw-p 0002c000 08:01 138709                     /usr/lib64/libssh2.so.1.0.1
occamy_1  | 7fb7c03a1000-7fb7c03be000 r-xp 00000000 08:01 138761                     /usr/lib64/libvncclient.so.0.0.0
occamy_1  | 7fb7c03be000-7fb7c05bd000 ---p 0001d000 08:01 138761                     /usr/lib64/libvncclient.so.0.0.0
occamy_1  | 7fb7c05bd000-7fb7c05be000 r--p 0001c000 08:01 138761                     /usr/lib64/libvncclient.so.0.0.0
occamy_1  | 7fb7c05be000-7fb7c05bf000 rw-p 0001d000 08:01 138761                     /usr/lib64/libvncclient.so.0.0.0
occamy_1  | 7fb7c05bf000-7fb7c05d3000 r-xp 00000000 08:01 3672296                    /usr/lib/libguac-client-vnc.so.0.0.0
occamy_1  | 7fb7c05d3000-7fb7c07d3000 ---p 00014000 08:01 3672296                    /usr/lib/libguac-client-vnc.so.0.0.0
occamy_1  | 7fb7c07d3000-7fb7c07d4000 r--p 00014000 08:01 3672296                    /usr/lib/libguac-client-vnc.so.0.0.0
occamy_1  | 7fb7c07d4000-7fb7c07d5000 rw-p 00015000 08:01 3672296                    /usr/lib/libguac-client-vnc.so.0.0.0
occamy_1  | 7fb7c07d5000-7fb7c0935000 rw-p 00000000 00:00 0
occamy_1  | 7fb7c0935000-7fb7c0936000 ---p 00000000 00:00 0
occamy_1  | 7fb7c0936000-7fb7c1136000 rw-p 00000000 00:00 0
occamy_1  | 7fb7c1136000-7fb7c1137000 ---p 00000000 00:00 0
occamy_1  | 7fb7c1137000-7fb7c1937000 rw-p 00000000 00:00 0
occamy_1  | 7fb7c1937000-7fb7c1938000 ---p 00000000 00:00 0
occamy_1  | 7fb7c1938000-7fb7c2138000 rw-p 00000000 00:00 0
occamy_1  | 7fb7c2138000-7fb7c2139000 ---p 00000000 00:00 0
occamy_1  | 7fb7c2139000-7fb7c2939000 rw-p 00000000 00:00 0
occamy_1  | 7fb7c2939000-7fb7c293a000 ---p 00000000 00:00 0
occamy_1  | 7fb7c293a000-7fb7c534b000 rw-p 00000000 00:00 0
occamy_1  | 7fb7c534b000-7fb7c53ab000 r-xp 00000000 08:01 3411114                    /usr/lib64/libpcre.so.1.2.0
occamy_1  | 7fb7c53ab000-7fb7c55ab000 ---p 00060000 08:01 3411114                    /usr/lib64/libpcre.so.1.2.0
occamy_1  | 7fb7c55ab000-7fb7c55ac000 r--p 00060000 08:01 3411114                    /usr/lib64/libpcre.so.1.2.0
occamy_1  | 7fb7c55ac000-7fb7c55ad000 rw-p 00061000 08:01 3411114                    /usr/lib64/libpcre.so.1.2.0
occamy_1  | 7fb7c55ad000-7fb7c55d1000 r-xp 00000000 08:01 3411154                    /usr/lib64/libselinux.so.1
occamy_1  | 7fb7c55d1000-7fb7c57d0000 ---p 00024000 08:01 3411154                    /usr/lib64/libselinux.so.1
occamy_1  | 7fb7c57d0000-7fb7c57d1000 r--p 00023000 08:01 3411154                    /usr/lib64/libselinux.so.1
occamy_1  | 7fb7c57d1000-7fb7c57d2000 rw-p 00024000 08:01 3411154                    /usr/lib64/libselinux.so.1
occamy_1  | 7fb7c57d2000-7fb7c57d4000 rw-p 00000000 00:00 0
occamy_1  | 7fb7c57d4000-7fb7c57ea000 r-xp 00000000 08:01 138683                     /usr/lib64/libresolv-2.17.so
occamy_1  | 7fb7c57ea000-7fb7c59e9000 ---p 00016000 08:01 138683                     /usr/lib64/libresolv-2.17.so
occamy_1  | 7fb7c59e9000-7fb7c59ea000 r--p 00015000 08:01 138683                     /usr/lib64/libresolv-2.17.so
occamy_1  | 7fb7c59ea000-7fb7c59eb000 rw-p 00016000 08:01 138683                     /usr/lib64/libresolv-2.17.so
occamy_1  | 7fb7c59eb000-7fb7c59ed000 rw-p 00000000 00:00 0
occamy_1  | 7fb7c59ed000-7fb7c59f0000 r-xp 00000000 08:01 3411034                    /usr/lib64/libkeyutils.so.1.5
occamy_1  | 7fb7c59f0000-7fb7c5bef000 ---p 00003000 08:01 3411034                    /usr/lib64/libkeyutils.so.1.5
occamy_1  | 7fb7c5bef000-7fb7c5bf0000 r--p 00002000 08:01 3411034                    /usr/lib64/libkeyutils.so.1.5
occamy_1  | 7fb7c5bf0000-7fb7c5bf1000 rw-p 00003000 08:01 3411034                    /usr/lib64/libkeyutils.so.1.5
occamy_1  | 7fb7c5bf1000-7fb7c5bff000 r-xp 00000000 08:01 138564                     /usr/lib64/libkrb5support.so.0.1
occamy_1  | 7fb7c5bff000-7fb7c5dff000 ---p 0000e000 08:01 138564                     /usr/lib64/libkrb5support.so.0.1
occamy_1  | 7fb7c5dff000-7fb7c5e00000 r--p 0000e000 08:01 138564                     /usr/lib64/libkrb5support.so.0.1
occamy_1  | 7fb7c5e00000-7fb7c5e01000 rw-p 0000f000 08:01 138564                     /usr/lib64/libkrb5support.so.0.1
occamy_1  | 7fb7c5e01000-7fb7c5e11000 r-xp 00000000 08:01 138235                     /usr/lib64/libGLX.so.0.0.0
occamy_1  | 7fb7c5e11000-7fb7c6011000 ---p 00010000 08:01 138235                     /usr/lib64/libGLX.so.0.0.0
occamy_1  | 7fb7c6011000-7fb7c6012000 r--p 00010000 08:01 138235                     /usr/lib64/libGLX.so.0.0.0
occamy_1  | 7fb7c6012000-7fb7c6013000 rw-p 00011000 08:01 138235                     /usr/lib64/libGLX.so.0.0.0
occamy_1  | 7fb7c6013000-7fb7c6033000 rw-p 00000000 00:00 0
occamy_1  | 7fb7c6033000-7fb7c6035000 r-xp 00000000 08:01 138258                     /usr/lib64/libXau.so.6.0.0
occamy_1  | 7fb7c6035000-7fb7c6235000 ---p 00002000 08:01 138258                     /usr/lib64/libXau.so.6.0.0
occamy_1  | 7fb7c6235000-7fb7c6236000 r--p 00002000 08:01 138258                     /usr/lib64/libXau.so.6.0.0
occamy_1  | 7fb7c6236000-7fb7c6237000 rw-p 00003000 08:01 138258                     /usr/lib64/libXau.so.6.0.0
occamy_1  | 7fb7c6237000-7fb7c62a5000 r-xp 00000000 08:01 138241                     /usr/lib64/libGLdispatch.so.0.0.0
occamy_1  | 7fb7c62a5000-7fb7c64a4000 ---p 0006e000 08:01 138241                     /usr/lib64/libGLdispatch.so.0.0.0
occamy_1  | 7fb7c64a4000-7fb7c64cc000 r--p 0006d000 08:01 138241                     /usr/lib64/libGLdispatch.so.0.0.0
occamy_1  | 7fb7c64cc000-7fb7c64cd000 rw-p 00095000 08:01 138241                     /usr/lib64/libGLdispatch.so.0.0.0
occamy_1  | 7fb7c64cd000-7fb7c64ed000 rw-p 00000000 00:00 0
occamy_1  | 7fb7c64ed000-7fb7c64fc000 r-xp 00000000 08:01 3410939                    /usr/lib64/libbz2.so.1.0.6
occamy_1  | 7fb7c64fc000-7fb7c66fb000 ---p 0000f000 08:01 3410939                    /usr/lib64/libbz2.so.1.0.6
occamy_1  | 7fb7c66fb000-7fb7c66fc000 r--p 0000e000 08:01 3410939                    /usr/lib64/libbz2.so.1.0.6
occamy_1  | 7fb7c66fc000-7fb7c66fd000 rw-p 0000f000 08:01 3410939                    /usr/lib64/libbz2.so.1.0.6
occamy_1  | 7fb7c66fd000-7fb7c6701000 r-xp 00000000 08:01 138752                     /usr/lib64/libuuid.so.1.3.0
occamy_1  | 7fb7c6701000-7fb7c6900000 ---p 00004000 08:01 138752                     /usr/lib64/libuuid.so.1.3.0
occamy_1  | 7fb7c6900000-7fb7c6901000 r--p 00003000 08:01 138752                     /usr/lib64/libuuid.so.1.3.0
occamy_1  | 7fb7c6901000-7fb7c6902000 rw-p 00004000 08:01 138752                     /usr/lib64/libuuid.so.1.3.0
occamy_1  | 7fb7c6902000-7fb7c6929000 r-xp 00000000 08:01 3410976                    /usr/lib64/libexpat.so.1.6.0
occamy_1  | 7fb7c6929000-7fb7c6b29000 ---p 00027000 08:01 3410976                    /usr/lib64/libexpat.so.1.6.0
occamy_1  | 7fb7c6b29000-7fb7c6b2b000 r--p 00027000 08:01 3410976                    /usr/lib64/libexpat.so.1.6.0
occamy_1  | 7fb7c6b2b000-7fb7c6b2c000 rw-p 00029000 08:01 3410976                    /usr/lib64/libexpat.so.1.6.0
occamy_1  | 7fb7c6b2c000-7fb7c6b5d000 r-xp 00000000 08:01 138538                     /usr/lib64/libk5crypto.so.3.1
occamy_1  | 7fb7c6b5d000-7fb7c6d5c000 ---p 00031000 08:01 138538                     /usr/lib64/libk5crypto.so.3.1
occamy_1  | 7fb7c6d5c000-7fb7c6d5e000 r--p 00030000 08:01 138538                     /usr/lib64/libk5crypto.so.3.1
occamy_1  | 7fb7c6d5e000-7fb7c6d5f000 rw-p 00032000 08:01 138538                     /usr/lib64/libk5crypto.so.3.1
occamy_1  | 7fb7c6d5f000-7fb7c6d62000 r-xp 00000000 08:01 138346                     /usr/lib64/libcom_err.so.2.1
occamy_1  | 7fb7c6d62000-7fb7c6f61000 ---p 00003000 08:01 138346                     /usr/lib64/libcom_err.so.2.1
occamy_1  | 7fb7c6f61000-7fb7c6f62000 r--p 00002000 08:01 138346                     /usr/lib64/libcom_err.so.2.1
occamy_1  | 7fb7c6f62000-7fb7c6f63000 rw-p 00003000 08:01 138346                     /usr/lib64/libcom_err.so.2.1
occamy_1  | 7fb7c6f63000-7fb7c703c000 r-xp 00000000 08:01 138561                     /usr/lib64/libkrb5.so.3.3
occamy_1  | 7fb7c703c000-7fb7c723b000 ---p 000d9000 08:01 138561                     /usr/lib64/libkrb5.so.3.3
occamy_1  | 7fb7c723b000-7fb7c7249000 r--p 000d8000 08:01 138561                     /usr/lib64/libkrb5.so.3.3
occamy_1  | 7fb7c7249000-7fb7c724c000 rw-p 000e6000 08:01 138561                     /usr/lib64/libkrb5.so.3.3
occamy_1  | 7fb7c724c000-7fb7c7296000 r-xp 00000000 08:01 138456                     /usr/lib64/libgssapi_krb5.so.2.2
occamy_1  | 7fb7c7296000-7fb7c7496000 ---p 0004a000 08:01 138456                     /usr/lib64/libgssapi_krb5.so.2.2
occamy_1  | 7fb7c7496000-7fb7c7497000 r--p 0004a000 08:01 138456                     /usr/lib64/libgssapi_krb5.so.2.2
occamy_1  | 7fb7c7497000-7fb7c7499000 rw-p 0004b000 08:01 138456                     /usr/lib64/libgssapi_krb5.so.2.2
occamy_1  | 7fb7c7499000-7fb7c759a000 r-xp 00000000 08:01 138571                     /usr/lib64/libm-2.17.so
occamy_1  | 7fb7c759a000-7fb7c7799000 ---p 00101000 08:01 138571                     /usr/lib64/libm-2.17.so
occamy_1  | 7fb7c7799000-7fb7c779a000 r--p 00100000 08:01 138571                     /usr/lib64/libm-2.17.so
occamy_1  | 7fb7c779a000-7fb7c779b000 rw-p 00101000 08:01 138571                     /usr/lib64/libm-2.17.so
occamy_1  | 7fb7c779b000-7fb7c77a2000 r-xp 00000000 08:01 138695                     /usr/lib64/librt-2.17.so
occamy_1  | 7fb7c77a2000-7fb7c79a1000 ---p 00007000 08:01 138695                     /usr/lib64/librt-2.17.so
occamy_1  | 7fb7c79a1000-7fb7c79a2000 r--p 00006000 08:01 138695                     /usr/lib64/librt-2.17.so
occamy_1  | 7fb7c79a2000-7fb7c79a3000 rw-p 00007000 08:01 138695                     /usr/lib64/librt-2.17.so
occamy_1  | 7fb7c79a3000-7fb7c7a14000 r-xp 00000000 08:01 138226                     /usr/lib64/libGL.so.1.7.0
occamy_1  | 7fb7c7a14000-7fb7c7c13000 ---p 00071000 08:01 138226                     /usr/lib64/libGL.so.1.7.0
occamy_1  | 7fb7c7c13000-7fb7c7c2d000 r--p 00070000 08:01 138226                     /usr/lib64/libGL.so.1.7.0
occamy_1  | 7fb7c7c2d000-7fb7c7c2e000 rw-p 0008a000 08:01 138226                     /usr/lib64/libGL.so.1.7.0
occamy_1  | 7fb7c7c2e000-7fb7c7c2f000 rw-p 00000000 00:00 0
occamy_1  | 7fb7c7c2f000-7fb7c7c44000 r-xp 00000000 08:01 3411212                    /usr/lib64/libz.so.1.2.7
occamy_1  | 7fb7c7c44000-7fb7c7e43000 ---p 00015000 08:01 3411212                    /usr/lib64/libz.so.1.2.7
occamy_1  | 7fb7c7e43000-7fb7c7e44000 r--p 00014000 08:01 3411212                    /usr/lib64/libz.so.1.2.7
occamy_1  | 7fb7c7e44000-7fb7c7e45000 rw-p 00015000 08:01 3411212                    /usr/lib64/libz.so.1.2.7
occamy_1  | 7fb7c7e45000-7fb7c7e56000 r-xp 00000000 08:01 138266                     /usr/lib64/libXext.so.6.4.0
occamy_1  | 7fb7c7e56000-7fb7c8055000 ---p 00011000 08:01 138266                     /usr/lib64/libXext.so.6.4.0
occamy_1  | 7fb7c8055000-7fb7c8056000 r--p 00010000 08:01 138266                     /usr/lib64/libXext.so.6.4.0
occamy_1  | 7fb7c8056000-7fb7c8057000 rw-p 00011000 08:01 138266                     /usr/lib64/libXext.so.6.4.0
occamy_1  | 7fb7c8057000-7fb7c818f000 r-xp 00000000 08:01 138255                     /usr/lib64/libX11.so.6.3.0
occamy_1  | 7fb7c818f000-7fb7c838f000 ---p 00138000 08:01 138255                     /usr/lib64/libX11.so.6.3.0
occamy_1  | 7fb7c838f000-7fb7c8390000 r--p 00138000 08:01 138255                     /usr/lib64/libX11.so.6.3.0
occamy_1  | 7fb7c8390000-7fb7c8395000 rw-p 00139000 08:01 138255                     /usr/lib64/libX11.so.6.3.0
occamy_1  | 7fb7c8395000-7fb7c839e000 r-xp 00000000 08:01 138285                     /usr/lib64/libXrender.so.1.3.0
occamy_1  | 7fb7c839e000-7fb7c859e000 ---p 00009000 08:01 138285                     /usr/lib64/libXrender.so.1.3.0
occamy_1  | 7fb7c859e000-7fb7c859f000 r--p 00009000 08:01 138285                     /usr/lib64/libXrender.so.1.3.0
occamy_1  | 7fb7c859f000-7fb7c85a0000 rw-p 0000a000 08:01 138285                     /usr/lib64/libXrender.so.1.3.0
occamy_1  | 7fb7c85a0000-7fb7c85ac000 r-xp 00000000 08:01 138826                     /usr/lib64/libxcb-render.so.0.0.0
occamy_1  | 7fb7c85ac000-7fb7c87ac000 ---p 0000c000 08:01 138826                     /usr/lib64/libxcb-render.so.0.0.0
occamy_1  | 7fb7c87ac000-7fb7c87ad000 r--p 0000c000 08:01 138826                     /usr/lib64/libxcb-render.so.0.0.0
occamy_1  | 7fb7c87ad000-7fb7c87ae000 rw-p 0000d000 08:01 138826                     /usr/lib64/libxcb-render.so.0.0.0
occamy_1  | 7fb7c87ae000-7fb7c87d5000 r-xp 00000000 08:01 138874                     /usr/lib64/libxcb.so.1.1.0
occamy_1  | 7fb7c87d5000-7fb7c89d4000 ---p 00027000 08:01 138874                     /usr/lib64/libxcb.so.1.1.0
occamy_1  | 7fb7c89d4000-7fb7c89d5000 r--p 00026000 08:01 138874                     /usr/lib64/libxcb.so.1.1.0
occamy_1  | 7fb7c89d5000-7fb7c89d6000 rw-p 00027000 08:01 138874                     /usr/lib64/libxcb.so.1.1.0
occamy_1  | 7fb7c89d6000-7fb7c89d8000 r-xp 00000000 08:01 138838                     /usr/lib64/libxcb-shm.so.0.0.0
occamy_1  | 7fb7c89d8000-7fb7c8bd8000 ---p 00002000 08:01 138838                     /usr/lib64/libxcb-shm.so.0.0.0
occamy_1  | 7fb7c8bd8000-7fb7c8bd9000 r--p 00002000 08:01 138838                     /usr/lib64/libxcb-shm.so.0.0.0
occamy_1  | 7fb7c8bd9000-7fb7c8bda000 rw-p 00003000 08:01 138838                     /usr/lib64/libxcb-shm.so.0.0.0
occamy_1  | 7fb7c8bda000-7fb7c8bec000 r-xp 00000000 08:01 138217                     /usr/lib64/libEGL.so.1.1.0
occamy_1  | 7fb7c8bec000-7fb7c8dec000 ---p 00012000 08:01 138217                     /usr/lib64/libEGL.so.1.1.0
occamy_1  | 7fb7c8dec000-7fb7c8ded000 r--p 00012000 08:01 138217                     /usr/lib64/libEGL.so.1.1.0
occamy_1  | 7fb7c8ded000-7fb7c8dee000 rw-p 00013000 08:01 138217                     /usr/lib64/libEGL.so.1.1.0
occamy_1  | 7fb7c8dee000-7fb7c8ea5000 r-xp 00000000 08:01 138415                     /usr/lib64/libfreetype.so.6.14.0
occamy_1  | 7fb7c8ea5000-7fb7c90a5000 ---p 000b7000 08:01 138415                     /usr/lib64/libfreetype.so.6.14.0
occamy_1  | 7fb7c90a5000-7fb7c90ac000 r--p 000b7000 08:01 138415                     /usr/lib64/libfreetype.so.6.14.0
occamy_1  | 7fb7c90ac000-7fb7c90ad000 rw-p 000be000 08:01 138415                     /usr/lib64/libfreetype.so.6.14.0
occamy_1  | 7fb7c90ad000-7fb7c90ed000 r-xp 00000000 08:01 138400                     /usr/lib64/libfontconfig.so.1.11.1
occamy_1  | 7fb7c90ed000-7fb7c92ec000 ---p 00040000 08:01 138400                     /usr/lib64/libfontconfig.so.1.11.1
occamy_1  | 7fb7c92ec000-7fb7c92ee000 r--p 0003f000 08:01 138400                     /usr/lib64/libfontconfig.so.1.11.1
occamy_1  | 7fb7c92ee000-7fb7c92ef000 rw-p 00041000 08:01 138400                     /usr/lib64/libfontconfig.so.1.11.1
occamy_1  | 7fb7c92ef000-7fb7c938f000 r-xp 00000000 08:01 138658                     /usr/lib64/libpixman-1.so.0.34.0
occamy_1  | 7fb7c938f000-7fb7c958f000 ---p 000a0000 08:01 138658                     /usr/lib64/libpixman-1.so.0.34.0
occamy_1  | 7fb7c958f000-7fb7c9597000 r--p 000a0000 08:01 138658                     /usr/lib64/libpixman-1.so.0.34.0
occamy_1  | 7fb7c9597000-7fb7c9598000 rw-p 000a8000 08:01 138658                     /usr/lib64/libpixman-1.so.0.34.0
occamy_1  | 7fb7c9598000-7fb7c95e4000 r-xp 00000000 08:01 138785                     /usr/lib64/libwebp.so.4.0.2
occamy_1  | 7fb7c95e4000-7fb7c97e3000 ---p 0004c000 08:01 138785                     /usr/lib64/libwebp.so.4.0.2
occamy_1  | 7fb7c97e3000-7fb7c97e4000 r--p 0004b000 08:01 138785                     /usr/lib64/libwebp.so.4.0.2
occamy_1  | 7fb7c97e4000-7fb7c97e5000 rw-p 0004c000 08:01 138785                     /usr/lib64/libwebp.so.4.0.2
occamy_1  | 7fb7c97e5000-7fb7c97e8000 rw-p 00000000 00:00 0
occamy_1  | 7fb7c97e8000-7fb7c97f3000 r-xp 00000000 08:01 138633                     /usr/lib64/libossp-uuid.so.16.0.22
occamy_1  | 7fb7c97f3000-7fb7c99f2000 ---p 0000b000 08:01 138633                     /usr/lib64/libossp-uuid.so.16.0.22
occamy_1  | 7fb7c99f2000-7fb7c99f3000 r--p 0000a000 08:01 138633                     /usr/lib64/libossp-uuid.so.16.0.22
occamy_1  | 7fb7c99f3000-7fb7c99f4000 rw-p 0000b000 08:01 138633                     /usr/lib64/libossp-uuid.so.16.0.22
occamy_1  | 7fb7c99f4000-7fb7c9c2a000 r-xp 00000000 08:01 138353                     /usr/lib64/libcrypto.so.1.0.2k
occamy_1  | 7fb7c9c2a000-7fb7c9e2a000 ---p 00236000 08:01 138353                     /usr/lib64/libcrypto.so.1.0.2k
occamy_1  | 7fb7c9e2a000-7fb7c9e46000 r--p 00236000 08:01 138353                     /usr/lib64/libcrypto.so.1.0.2k
occamy_1  | 7fb7c9e46000-7fb7c9e53000 rw-p 00252000 08:01 138353                     /usr/lib64/libcrypto.so.1.0.2k
occamy_1  | 7fb7c9e53000-7fb7c9e57000 rw-p 00000000 00:00 0
occamy_1  | 7fb7c9e57000-7fb7c9ebe000 r-xp 00000000 08:01 138711                     /usr/lib64/libssl.so.1.0.2k
occamy_1  | 7fb7c9ebe000-7fb7ca0be000 ---p 00067000 08:01 138711                     /usr/lib64/libssl.so.1.0.2k
occamy_1  | 7fb7ca0be000-7fb7ca0c2000 r--p 00067000 08:01 138711                     /usr/lib64/libssl.so.1.0.2k
occamy_1  | 7fb7ca0c2000-7fb7ca0c9000 rw-p 0006b000 08:01 138711                     /usr/lib64/libssl.so.1.0.2k
occamy_1  | 7fb7ca0c9000-7fb7ca0f2000 r-xp 00000000 08:01 138664                     /usr/lib64/libpng15.so.15.13.0
occamy_1  | 7fb7ca0f2000-7fb7ca2f2000 ---p 00029000 08:01 138664                     /usr/lib64/libpng15.so.15.13.0
occamy_1  | 7fb7ca2f2000-7fb7ca2f3000 r--p 00029000 08:01 138664                     /usr/lib64/libpng15.so.15.13.0
occamy_1  | 7fb7ca2f3000-7fb7ca2f4000 rw-p 0002a000 08:01 138664                     /usr/lib64/libpng15.so.15.13.0
occamy_1  | 7fb7ca2f4000-7fb7ca337000 r-xp 00000000 08:01 138535                     /usr/lib64/libjpeg.so.62.1.0
occamy_1  | 7fb7ca337000-7fb7ca537000 ---p 00043000 08:01 138535                     /usr/lib64/libjpeg.so.62.1.0
occamy_1  | 7fb7ca537000-7fb7ca538000 r--p 00043000 08:01 138535                     /usr/lib64/libjpeg.so.62.1.0
occamy_1  | 7fb7ca538000-7fb7ca539000 rw-p 00044000 08:01 138535                     /usr/lib64/libjpeg.so.62.1.0
occamy_1  | 7fb7ca539000-7fb7ca549000 rw-p 00000000 00:00 0
occamy_1  | 7fb7ca549000-7fb7ca54b000 r-xp 00000000 08:01 138369                     /usr/lib64/libdl-2.17.so
occamy_1  | 7fb7ca54b000-7fb7ca74b000 ---p 00002000 08:01 138369                     /usr/lib64/libdl-2.17.so
occamy_1  | 7fb7ca74b000-7fb7ca74c000 r--p 00002000 08:01 138369                     /usr/lib64/libdl-2.17.so
occamy_1  | 7fb7ca74c000-7fb7ca74d000 rw-p 00003000 08:01 138369                     /usr/lib64/libdl-2.17.so
occamy_1  | 7fb7ca74d000-7fb7ca87d000 r-xp 00000000 08:01 138334                     /usr/lib64/libcairo.so.2.11512.0
occamy_1  | 7fb7ca87d000-7fb7caa7d000 ---p 00130000 08:01 138334                     /usr/lib64/libcairo.so.2.11512.0
occamy_1  | 7fb7caa7d000-7fb7caa80000 r--p 00130000 08:01 138334                     /usr/lib64/libcairo.so.2.11512.0
occamy_1  | 7fb7caa80000-7fb7caa82000 rw-p 00133000 08:01 138334                     /usr/lib64/libcairo.so.2.11512.0
occamy_1  | 7fb7caa82000-7fb7caa84000 rw-p 00000000 00:00 0
occamy_1  | 7fb7caa84000-7fb7cac47000 r-xp 00000000 08:01 138325                     /usr/lib64/libc-2.17.so
occamy_1  | 7fb7cac47000-7fb7cae47000 ---p 001c3000 08:01 138325                     /usr/lib64/libc-2.17.so
occamy_1  | 7fb7cae47000-7fb7cae4b000 r--p 001c3000 08:01 138325                     /usr/lib64/libc-2.17.so
occamy_1  | 7fb7cae4b000-7fb7cae4d000 rw-p 001c7000 08:01 138325                     /usr/lib64/libc-2.17.so
occamy_1  | 7fb7cae4d000-7fb7cae52000 rw-p 00000000 00:00 0
occamy_1  | 7fb7cae52000-7fb7cae69000 r-xp 00000000 08:01 138667                     /usr/lib64/libpthread-2.17.so
occamy_1  | 7fb7cae69000-7fb7cb068000 ---p 00017000 08:01 138667                     /usr/lib64/libpthread-2.17.so
occamy_1  | 7fb7cb068000-7fb7cb069000 r--p 00016000 08:01 138667                     /usr/lib64/libpthread-2.17.so
occamy_1  | 7fb7cb069000-7fb7cb06a000 rw-p 00017000 08:01 138667                     /usr/lib64/libpthread-2.17.so
occamy_1  | 7fb7cb06a000-7fb7cb06e000 rw-p 00000000 00:00 0
occamy_1  | 7fb7cb06e000-7fb7cb081000 r-xp 00000000 08:01 3672301                    /usr/lib/libguac.so.16.0.0
occamy_1  | 7fb7cb081000-7fb7cb280000 ---p 00013000 08:01 3672301                    /usr/lib/libguac.so.16.0.0
occamy_1  | 7fb7cb280000-7fb7cb281000 r--p 00012000 08:01 3672301                    /usr/lib/libguac.so.16.0.0
occamy_1  | 7fb7cb281000-7fb7cb282000 rw-p 00013000 08:01 3672301                    /usr/lib/libguac.so.16.0.0
occamy_1  | 7fb7cb282000-7fb7cb2a4000 r-xp 00000000 08:01 138210                     /usr/lib64/ld-2.17.so
occamy_1  | 7fb7cb366000-7fb7cb499000 rw-p 00000000 00:00 0
occamy_1  | 7fb7cb4a1000-7fb7cb4a3000 rw-p 00000000 00:00 0
occamy_1  | 7fb7cb4a3000-7fb7cb4a4000 r--p 00021000 08:01 138210                     /usr/lib64/ld-2.17.so
occamy_1  | 7fb7cb4a4000-7fb7cb4a5000 rw-p 00022000 08:01 138210                     /usr/lib64/ld-2.17.so
occamy_1  | 7fb7cb4a5000-7fb7cb4a6000 rw-p 00000000 00:00 0
occamy_1  | 7fffbd087000-7fffbd0a8000 rw-p 00000000 00:00 0                          [stack]
occamy_1  | 7fffbd1c5000-7fffbd1c7000 r--p 00000000 00:00 0                          [vvar]
occamy_1  | 7fffbd1c7000-7fffbd1c9000 r-xp 00000000 00:00 0                          [vdso]
occamy_1  | ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
occamy_1  | SIGABRT: abort
occamy_1  | PC=0x7fb7caaba337 m=14 sigcode=18446744073709551610
occamy_1  |
occamy_1  | goroutine 0 [idle]:
occamy_1  | runtime: unknown pc 0x7fb7caaba337
occamy_1  | stack: frame={sp:0x7fb7a67fb0a8, fp:0x0} stack=[0x7fb7a5ffbfe8,0x7fb7a67fbbe8)
occamy_1  | 00007fb7a67fafa8:  00007fb7cb075000  4000000000000000
occamy_1  | 00007fb7a67fafb8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fafc8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fafd8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fafe8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67faff8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb008:  00007fb7cabc149e  0000000000000000
occamy_1  | 00007fb7a67fb018:  0000000000400f58  00007fb7a67fb0c0
occamy_1  | 00007fb7a67fb028:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb038:  00007fb7cab793f5  0000000000000070
occamy_1  | 00007fb7a67fb048:  0000000000000035  00007fb7a67fb110
occamy_1  | 00007fb7a67fb058:  00000004a67fb0e0  00007fb7a67fb0e0
occamy_1  | 00007fb7a67fb068:  00007fb7cab990aa  0000000000000000
occamy_1  | 00007fb7a67fb078:  0000000000000000  00007fb7a67fbae0
occamy_1  | 00007fb7a67fb088:  0000000000000012  00007fb7a67fb600
occamy_1  | 00007fb7a67fb098:  0000000000000073  0000000000000002
occamy_1  | 00007fb7a67fb0a8: <00007fb7caabba28  0000000000000020
occamy_1  | 00007fb7a67fb0b8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb0c8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb0d8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb0e8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb0f8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb108:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb118:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb128:  0000000000000000  00007fb7a67fb0da
occamy_1  | 00007fb7a67fb138:  0000000000000006  00007fb7cac0dff5
occamy_1  | 00007fb7a67fb148:  0000000000000002  00007fb7a67fb0ee
occamy_1  | 00007fb7a67fb158:  0000000000000002  00007fb7cac0bde7
occamy_1  | 00007fb7a67fb168:  0000000000000001  00007fb7cac0dff1
occamy_1  | 00007fb7a67fb178:  0000000000000003  00007fb7a67fb0d4
occamy_1  | 00007fb7a67fb188:  000000000000000c  00007fb7cac0dff5
occamy_1  | 00007fb7a67fb198:  0000000000000002  00007fb7a67fb400
occamy_1  | runtime: unknown pc 0x7fb7caaba337
occamy_1  | stack: frame={sp:0x7fb7a67fb0a8, fp:0x0} stack=[0x7fb7a5ffbfe8,0x7fb7a67fbbe8)
occamy_1  | 00007fb7a67fafa8:  00007fb7cb075000  4000000000000000
occamy_1  | 00007fb7a67fafb8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fafc8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fafd8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fafe8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67faff8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb008:  00007fb7cabc149e  0000000000000000
occamy_1  | 00007fb7a67fb018:  0000000000400f58  00007fb7a67fb0c0
occamy_1  | 00007fb7a67fb028:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb038:  00007fb7cab793f5  0000000000000070
occamy_1  | 00007fb7a67fb048:  0000000000000035  00007fb7a67fb110
occamy_1  | 00007fb7a67fb058:  00000004a67fb0e0  00007fb7a67fb0e0
occamy_1  | 00007fb7a67fb068:  00007fb7cab990aa  0000000000000000
occamy_1  | 00007fb7a67fb078:  0000000000000000  00007fb7a67fbae0
occamy_1  | 00007fb7a67fb088:  0000000000000012  00007fb7a67fb600
occamy_1  | 00007fb7a67fb098:  0000000000000073  0000000000000002
occamy_1  | 00007fb7a67fb0a8: <00007fb7caabba28  0000000000000020
occamy_1  | 00007fb7a67fb0b8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb0c8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb0d8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb0e8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb0f8:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb108:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb118:  0000000000000000  0000000000000000
occamy_1  | 00007fb7a67fb128:  0000000000000000  00007fb7a67fb0da
occamy_1  | 00007fb7a67fb138:  0000000000000006  00007fb7cac0dff5
occamy_1  | 00007fb7a67fb148:  0000000000000002  00007fb7a67fb0ee
occamy_1  | 00007fb7a67fb158:  0000000000000002  00007fb7cac0bde7
occamy_1  | 00007fb7a67fb168:  0000000000000001  00007fb7cac0dff1
occamy_1  | 00007fb7a67fb178:  0000000000000003  00007fb7a67fb0d4
occamy_1  | 00007fb7a67fb188:  000000000000000c  00007fb7cac0dff5
occamy_1  | 00007fb7a67fb198:  0000000000000002  00007fb7a67fb400
occamy_1  |
occamy_1  | goroutine 42 [syscall]:
occamy_1  | runtime.cgocall(0x9de7f0, 0xc0001d5508, 0xc0009de830)
occamy_1  |     /usr/local/go/src/runtime/cgocall.go:128 +0x5b fp=0xc0001d54d8 sp=0xc0001d54a0 pc=0x4050bb
occamy_1  | github.com/changkun/occamy/lib._Cfunc_guac_client_free(0x7fb7a0000e80)
occamy_1  |     _cgo_gotypes.go:282 +0x41 fp=0xc0001d5508 sp=0xc0001d54d8 pc=0x9d8551
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close.func1.2(0xc000264280)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:93 +0x5e fp=0xc0001d5548 sp=0xc0001d5508 pc=0x9d968e
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close.func1()
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:93 +0x3d fp=0xc0001d5568 sp=0xc0001d5548 pc=0x9d96dd
occamy_1  | sync.(*Once).doSlow(0xc000264288, 0xc0001d5618)
occamy_1  |     /usr/local/go/src/sync/once.go:66 +0xe3 fp=0xc0001d5608 sp=0xc0001d5568 pc=0x46b5f3
occamy_1  | sync.(*Once).Do(...)
occamy_1  |     /usr/local/go/src/sync/once.go:57
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close(0xc000264280)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:91 +0x65 fp=0xc0001d5638 sp=0xc0001d5608 pc=0x9d8c35
occamy_1  | github.com/changkun/occamy/server.(*Session).Close(0xc0001c4630)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:122 +0x41 fp=0xc0001d5650 sp=0xc0001d5638 pc=0x9dc891
occamy_1  | github.com/changkun/occamy/server.(*Session).Join.func1(0xc0001c4630, 0xa, 0x1)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:93 +0x35d fp=0xc0001d57c8 sp=0xc0001d5650 pc=0x9ddcfd
occamy_1  | runtime.goexit()
occamy_1  |     /usr/local/go/src/runtime/asm_amd64.s:1357 +0x1 fp=0xc0001d57d0 sp=0xc0001d57c8 pc=0x45d1b1
occamy_1  | created by github.com/changkun/occamy/server.(*Session).Join
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:69 +0x10a
occamy_1  |
occamy_1  | goroutine 1 [IO wait, locked to thread]:
occamy_1  | internal/poll.runtime_pollWait(0x7fb7cb3f3190, 0x72, 0x0)
occamy_1  |     /usr/local/go/src/runtime/netpoll.go:184 +0x55
occamy_1  | internal/poll.(*pollDesc).wait(0xc00008f398, 0x72, 0x0, 0x0, 0xb5563d)
occamy_1  |     /usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy_1  | internal/poll.(*pollDesc).waitRead(...)
occamy_1  |     /usr/local/go/src/internal/poll/fd_poll_runtime.go:92
occamy_1  | internal/poll.(*FD).Accept(0xc00008f380, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/internal/poll/fd_unix.go:384 +0x1f8
occamy_1  | net.(*netFD).accept(0xc00008f380, 0xc000195c60, 0x6d35c4, 0xc0001be180)
occamy_1  |     /usr/local/go/src/net/fd_unix.go:238 +0x42
occamy_1  | net.(*TCPListener).accept(0xc0001b01a0, 0x5dbfd22e, 0xc000195c60, 0x480576)
occamy_1  |     /usr/local/go/src/net/tcpsock_posix.go:139 +0x32
occamy_1  | net.(*TCPListener).Accept(0xc0001b01a0, 0xc000195cb0, 0x18, 0xc000000180, 0x6d2ade)
occamy_1  |     /usr/local/go/src/net/tcpsock.go:261 +0x47
occamy_1  | net/http.(*Server).Serve(0xc0001be0e0, 0xc62280, 0xc0001b01a0, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/net/http/server.go:2896 +0x286
occamy_1  | net/http.(*Server).ListenAndServe(0xc0001be0e0, 0x4, 0xb68e9d)
occamy_1  |     /usr/local/go/src/net/http/server.go:2825 +0xb7
occamy_1  | github.com/changkun/occamy/server.(*proxy).serve(0xc0001b0040)
occamy_1  |     /go/src/github.com/changkun/occamy/server/connection.go:70 +0x1ec
occamy_1  | github.com/changkun/occamy/server.Run()
occamy_1  |     /go/src/github.com/changkun/occamy/server/connection.go:42 +0xfa
occamy_1  | main.main()
occamy_1  |     /go/src/github.com/changkun/occamy/occamy.go:18 +0x20
occamy_1  |
occamy_1  | goroutine 19 [syscall]:
occamy_1  | os/signal.signal_recv(0x0)
occamy_1  |     /usr/local/go/src/runtime/sigqueue.go:147 +0x9c
occamy_1  | os/signal.loop()
occamy_1  |     /usr/local/go/src/os/signal/signal_unix.go:23 +0x22
occamy_1  | created by os/signal.init.0
occamy_1  |     /usr/local/go/src/os/signal/signal_unix.go:29 +0x41
occamy_1  |
occamy_1  | goroutine 21 [chan receive]:
occamy_1  | github.com/changkun/occamy/server.(*proxy).serve.func1(0xc0001be0e0)
occamy_1  |     /go/src/github.com/changkun/occamy/server/connection.go:61 +0xe0
occamy_1  | created by github.com/changkun/occamy/server.(*proxy).serve
occamy_1  |     /go/src/github.com/changkun/occamy/server/connection.go:58 +0x14f
occamy_1  |
occamy_1  | goroutine 6 [IO wait]:
occamy_1  | internal/poll.runtime_pollWait(0x7fb7cb3f30c0, 0x72, 0xffffffffffffffff)
occamy_1  |     /usr/local/go/src/runtime/netpoll.go:184 +0x55
occamy_1  | internal/poll.(*pollDesc).wait(0xc000020218, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
occamy_1  |     /usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy_1  | internal/poll.(*pollDesc).waitRead(...)
occamy_1  |     /usr/local/go/src/internal/poll/fd_poll_runtime.go:92
occamy_1  | internal/poll.(*FD).Read(0xc000020200, 0xc000216000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/internal/poll/fd_unix.go:169 +0x1cf
occamy_1  | net.(*netFD).Read(0xc000020200, 0xc000216000, 0x1000, 0x1000, 0xc00006a240, 0xc00020c7e8, 0x6c7df3)
occamy_1  |     /usr/local/go/src/net/fd_unix.go:202 +0x4f
occamy_1  | net.(*conn).Read(0xc000010120, 0xc000216000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/net/net.go:184 +0x68
occamy_1  | net/http.(*connReader).Read(0xc00002c2a0, 0xc000216000, 0x1000, 0x1000, 0xc463e0, 0xc00017da10, 0xc00020c8a8)
occamy_1  |     /usr/local/go/src/net/http/server.go:785 +0xf4
occamy_1  | bufio.(*Reader).fill(0xc0001fe060)
occamy_1  |     /usr/local/go/src/bufio/bufio.go:100 +0x103
occamy_1  | bufio.(*Reader).ReadSlice(0xc0001fe060, 0xc0000b0b0a, 0xc000234000, 0xc00020c9a8, 0x40e036, 0xc000226300, 0x100)
occamy_1  |     /usr/local/go/src/bufio/bufio.go:359 +0x3d
occamy_1  | bufio.(*Reader).ReadLine(0xc0001fe060, 0xc00020c9b0, 0xc000278000, 0x7fb7cb446008, 0x0, 0x0, 0x40e036)
occamy_1  |     /usr/local/go/src/bufio/bufio.go:388 +0x34
occamy_1  | net/textproto.(*Reader).readLineSlice(0xc00002c0f0, 0xc000226300, 0xc000020200, 0x0, 0x0, 0xc000024084)
occamy_1  |     /usr/local/go/src/net/textproto/reader.go:57 +0x6c
occamy_1  | net/textproto.(*Reader).ReadLine(...)
occamy_1  |     /usr/local/go/src/net/textproto/reader.go:38
occamy_1  | net/http.readRequest(0xc0001fe060, 0x0, 0xc000226300, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/net/http/request.go:1012 +0x92
occamy_1  | net/http.(*conn).readRequest(0xc0002280a0, 0xc63ec0, 0xc00006a200, 0x0, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/net/http/server.go:965 +0x15f
occamy_1  | net/http.(*conn).serve(0xc0002280a0, 0xc63ec0, 0xc00006a200)
occamy_1  |     /usr/local/go/src/net/http/server.go:1817 +0x6d4
occamy_1  | created by net/http.(*Server).Serve
occamy_1  |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy_1  |
occamy_1  | goroutine 36 [IO wait]:
occamy_1  | internal/poll.runtime_pollWait(0x7fb7cb3f2ff0, 0x72, 0xffffffffffffffff)
occamy_1  |     /usr/local/go/src/runtime/netpoll.go:184 +0x55
occamy_1  | internal/poll.(*pollDesc).wait(0xc0001d8118, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
occamy_1  |     /usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy_1  | internal/poll.(*pollDesc).waitRead(...)
occamy_1  |     /usr/local/go/src/internal/poll/fd_poll_runtime.go:92
occamy_1  | internal/poll.(*FD).Read(0xc0001d8100, 0xc00021a000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/internal/poll/fd_unix.go:169 +0x1cf
occamy_1  | net.(*netFD).Read(0xc0001d8100, 0xc00021a000, 0x1000, 0x1000, 0x0, 0x0, 0xaed320)
occamy_1  |     /usr/local/go/src/net/fd_unix.go:202 +0x4f
occamy_1  | net.(*conn).Read(0xc000202008, 0xc00021a000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/net/net.go:184 +0x68
occamy_1  | net/http.(*connReader).Read(0xc0001c4150, 0xc00021a000, 0x1000, 0x1000, 0x1, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/net/http/server.go:785 +0xf4
occamy_1  | bufio.(*Reader).fill(0xc0001c0120)
occamy_1  |     /usr/local/go/src/bufio/bufio.go:100 +0x103
occamy_1  | bufio.(*Reader).ReadSlice(0xc0001c0120, 0xa, 0xc0000eb998, 0xc0000eb9a8, 0x40e036, 0xc0000fb000, 0x100)
occamy_1  |     /usr/local/go/src/bufio/bufio.go:359 +0x3d
occamy_1  | bufio.(*Reader).ReadLine(0xc0001c0120, 0xc0000eb9b0, 0xc0001da380, 0x7fb7cb4466d0, 0x0, 0x1, 0xc0000eb9f0)
occamy_1  |     /usr/local/go/src/bufio/bufio.go:388 +0x34
occamy_1  | net/textproto.(*Reader).readLineSlice(0xc0001c4180, 0xc0000fb000, 0xc0001d8100, 0x0, 0x0, 0x431cac)
occamy_1  |     /usr/local/go/src/net/textproto/reader.go:57 +0x6c
occamy_1  | net/textproto.(*Reader).ReadLine(...)
occamy_1  |     /usr/local/go/src/net/textproto/reader.go:38
occamy_1  | net/http.readRequest(0xc0001c0120, 0x0, 0xc0000fb000, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/net/http/request.go:1012 +0x92
occamy_1  | net/http.(*conn).readRequest(0xc0002040a0, 0xc63ec0, 0xc000212000, 0x0, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/net/http/server.go:965 +0x15f
occamy_1  | net/http.(*conn).serve(0xc0002040a0, 0xc63ec0, 0xc000212000)
occamy_1  |     /usr/local/go/src/net/http/server.go:1817 +0x6d4
occamy_1  | created by net/http.(*Server).Serve
occamy_1  |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy_1  |
occamy_1  | goroutine 23 [syscall]:
occamy_1  | github.com/changkun/occamy/lib._Cfunc_guac_client_free(0x7fb7bc000e20)
occamy_1  |     _cgo_gotypes.go:282 +0x41
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close.func1.2(0xc0001b0380)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:93 +0x5e
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close.func1()
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:93 +0x3d
occamy_1  | sync.(*Once).doSlow(0xc0001b0388, 0xc0001d4e18)
occamy_1  |     /usr/local/go/src/sync/once.go:66 +0xe3
occamy_1  | sync.(*Once).Do(...)
occamy_1  |     /usr/local/go/src/sync/once.go:57
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close(0xc0001b0380)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:91 +0x65
occamy_1  | github.com/changkun/occamy/server.(*Session).Close(0xc00017dfb0)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:122 +0x41
occamy_1  | github.com/changkun/occamy/server.(*Session).Join.func1(0xc00017dfb0, 0xa, 0x1)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:93 +0x35d
occamy_1  | created by github.com/changkun/occamy/server.(*Session).Join
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:69 +0x10a
occamy_1  |
occamy_1  | goroutine 82 [chan receive, locked to thread]:
occamy_1  | github.com/changkun/occamy/server.(*Session).serveIO(0xc0001c4a20, 0xc000264640, 0xc0003a6b00, 0xc000317668, 0x0)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:202 +0x11b
occamy_1  | github.com/changkun/occamy/server.(*Session).Join(0xc0001c4a20, 0xc0003a6b00, 0xc000317668, 0x1, 0xc000317560, 0x1)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:104 +0x1c9
occamy_1  | github.com/changkun/occamy/server.(*proxy).routeConn(0xc0001b0040, 0xc0003a6b00, 0xc000317668, 0xc000246500, 0x0)
occamy_1  |     /go/src/github.com/changkun/occamy/server/connection.go:189 +0x335
occamy_1  | github.com/changkun/occamy/server.(*proxy).serveWS(0xc0001b0040, 0xc0003a2000)
occamy_1  |     /go/src/github.com/changkun/occamy/server/connection.go:154 +0x436
occamy_1  | github.com/gin-gonic/gin.(*Context).Next(0xc0003a2000)
occamy_1  |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy_1  | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).middlewareImpl(0xc0000b4fc0, 0xc0003a2000)
occamy_1  |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:382 +0x2bf
occamy_1  | github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).MiddlewareFunc.func1(0xc0003a2000)
occamy_1  |     /go/src/github.com/changkun/occamy/vendor/github.com/appleboy/gin-jwt/v2/auth_jwt.go:344 +0x34
occamy_1  | github.com/gin-gonic/gin.(*Context).Next(0xc0003a2000)
occamy_1  |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy_1  | github.com/gin-gonic/gin.RecoveryWithWriter.func1(0xc0003a2000)
occamy_1  |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/recovery.go:83 +0x64
occamy_1  | github.com/gin-gonic/gin.(*Context).Next(0xc0003a2000)
occamy_1  |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy_1  | github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc0003a2000)
occamy_1  |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/logger.go:240 +0xe1
occamy_1  | github.com/gin-gonic/gin.(*Context).Next(0xc0003a2000)
occamy_1  |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/context.go:124 +0x3b
occamy_1  | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000176500, 0xc0003a2000)
occamy_1  |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:389 +0x5b2
occamy_1  | github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000176500, 0xc62540, 0xc00039e1c0, 0xc000246500)
occamy_1  |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy_1  | net/http.serverHandler.ServeHTTP(0xc0001be0e0, 0xc62540, 0xc00039e1c0, 0xc000246500)
occamy_1  |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy_1  | net/http.(*conn).serve(0xc00016f4a0, 0xc63ec0, 0xc000212300)
occamy_1  |     /usr/local/go/src/net/http/server.go:1890 +0x875
occamy_1  | created by net/http.(*Server).Serve
occamy_1  |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy_1  |
occamy_1  | goroutine 51 [syscall]:
occamy_1  | github.com/changkun/occamy/lib._Cfunc_guac_client_free(0x7fb7bc02c310)
occamy_1  |     _cgo_gotypes.go:282 +0x41
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close.func1.2(0xc0003121c0)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:93 +0x5e
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close.func1()
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:93 +0x3d
occamy_1  | sync.(*Once).doSlow(0xc0003121c8, 0xc00003d618)
occamy_1  |     /usr/local/go/src/sync/once.go:66 +0xe3
occamy_1  | sync.(*Once).Do(...)
occamy_1  |     /usr/local/go/src/sync/once.go:57
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close(0xc0003121c0)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:91 +0x65
occamy_1  | github.com/changkun/occamy/server.(*Session).Close(0xc0002ee300)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:122 +0x41
occamy_1  | github.com/changkun/occamy/server.(*Session).Join.func1(0xc0002ee300, 0xa, 0x1)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:93 +0x35d
occamy_1  | created by github.com/changkun/occamy/server.(*Session).Join
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:69 +0x10a
occamy_1  |
occamy_1  | goroutine 74 [syscall]:
occamy_1  | github.com/changkun/occamy/lib._Cfunc_guac_client_free(0x7fb798001670)
occamy_1  |     _cgo_gotypes.go:282 +0x41
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close.func1.2(0xc0003f87c0)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:93 +0x5e
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close.func1()
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:93 +0x3d
occamy_1  | sync.(*Once).doSlow(0xc0003f87c8, 0xc0003e6e18)
occamy_1  |     /usr/local/go/src/sync/once.go:66 +0xe3
occamy_1  | sync.(*Once).Do(...)
occamy_1  |     /usr/local/go/src/sync/once.go:57
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close(0xc0003f87c0)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:91 +0x65
occamy_1  | github.com/changkun/occamy/server.(*Session).Close(0xc000274b40)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:122 +0x41
occamy_1  | github.com/changkun/occamy/server.(*Session).Join.func1(0xc000274b40, 0xa, 0x1)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:93 +0x35d
occamy_1  | created by github.com/changkun/occamy/server.(*Session).Join
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:69 +0x10a
occamy_1  |
occamy_1  | goroutine 27 [syscall]:
occamy_1  | github.com/changkun/occamy/lib._Cfunc_guac_client_free(0x7fb7a8000bb0)
occamy_1  |     _cgo_gotypes.go:282 +0x41
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close.func1.2(0xc0001b06a0)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:93 +0x5e
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close.func1()
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:93 +0x3d
occamy_1  | sync.(*Once).doSlow(0xc0001b06a8, 0xc00003e618)
occamy_1  |     /usr/local/go/src/sync/once.go:66 +0xe3
occamy_1  | sync.(*Once).Do(...)
occamy_1  |     /usr/local/go/src/sync/once.go:57
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close(0xc0001b06a0)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:91 +0x65
occamy_1  | github.com/changkun/occamy/server.(*Session).Close(0xc00025e330)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:122 +0x41
occamy_1  | github.com/changkun/occamy/server.(*Session).Join.func1(0xc00025e330, 0xa, 0x1)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:93 +0x35d
occamy_1  | created by github.com/changkun/occamy/server.(*Session).Join
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:69 +0x10a
occamy_1  |
occamy_1  | goroutine 70 [syscall]:
occamy_1  | github.com/changkun/occamy/lib._Cfunc_guac_client_free(0x7fb7980012c0)
occamy_1  |     _cgo_gotypes.go:282 +0x41
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close.func1.2(0xc0003f8500)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:93 +0x5e
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close.func1()
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:93 +0x3d
occamy_1  | sync.(*Once).doSlow(0xc0003f8508, 0xc000042e18)
occamy_1  |     /usr/local/go/src/sync/once.go:66 +0xe3
occamy_1  | sync.(*Once).Do(...)
occamy_1  |     /usr/local/go/src/sync/once.go:57
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close(0xc0003f8500)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:91 +0x65
occamy_1  | github.com/changkun/occamy/server.(*Session).Close(0xc000274660)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:122 +0x41
occamy_1  | github.com/changkun/occamy/server.(*Session).Join.func1(0xc000274660, 0xa, 0x1)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:93 +0x35d
occamy_1  | created by github.com/changkun/occamy/server.(*Session).Join
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:69 +0x10a
occamy_1  |
occamy_1  | goroutine 68 [syscall]:
occamy_1  | github.com/changkun/occamy/lib._Cfunc_guac_client_free(0x7fb7a0001d70)
occamy_1  |     _cgo_gotypes.go:282 +0x41
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close.func1.2(0xc0003f8220)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:93 +0x5e
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close.func1()
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:93 +0x3d
occamy_1  | sync.(*Once).doSlow(0xc0003f8228, 0xc0003e6618)
occamy_1  |     /usr/local/go/src/sync/once.go:66 +0xe3
occamy_1  | sync.(*Once).Do(...)
occamy_1  |     /usr/local/go/src/sync/once.go:57
occamy_1  | github.com/changkun/occamy/lib.(*Client).Close(0xc0003f8220)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/client.go:91 +0x65
occamy_1  | github.com/changkun/occamy/server.(*Session).Close(0xc000274270)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:122 +0x41
occamy_1  | github.com/changkun/occamy/server.(*Session).Join.func1(0xc000274270, 0xa, 0x1)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:93 +0x35d
occamy_1  | created by github.com/changkun/occamy/server.(*Session).Join
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:69 +0x10a
occamy_1  |
occamy_1  | goroutine 46 [syscall]:
occamy_1  | github.com/changkun/occamy/lib._Cfunc_guac_user_handle_connection(0x7fb770002c90, 0x7fb700e4e1c0, 0x0)
occamy_1  |     _cgo_gotypes.go:385 +0x4d
occamy_1  | github.com/changkun/occamy/lib.(*User).HandleConnection.func1(0xc00000e3e0, 0x42ec2a)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/user.go:59 +0x66
occamy_1  | github.com/changkun/occamy/lib.(*User).HandleConnection(0xc00000e3e0, 0xc0002645a0, 0x1)
occamy_1  |     /go/src/github.com/changkun/occamy/lib/user.go:59 +0x2f
occamy_1  | github.com/changkun/occamy/server.(*Session).Join.func1(0xc0001c4a20, 0xa, 0x1)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:88 +0x2e0
occamy_1  | created by github.com/changkun/occamy/server.(*Session).Join
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:69 +0x10a
occamy_1  |
occamy_1  | goroutine 47 [syscall]:
occamy_1  | syscall.Syscall(0x0, 0xb, 0xc00048e000, 0x2000, 0xc00039c230, 0xc44163, 0xb7cb01)
occamy_1  |     /usr/local/go/src/syscall/asm_linux_amd64.s:18 +0x5
occamy_1  | syscall.read(0xb, 0xc00048e000, 0x2000, 0x2000, 0xc0003a6b00, 0xc0003b250c, 0x2a)
occamy_1  |     /usr/local/go/src/syscall/zsyscall_linux_amd64.go:732 +0x5a
occamy_1  | syscall.Read(...)
occamy_1  |     /usr/local/go/src/syscall/syscall_unix.go:183
occamy_1  | github.com/changkun/occamy/protocol.IO.Read(0xb, 0xc00048e000, 0x2000, 0x2000, 0xc0001d6da0, 0x9cb587, 0x0)
occamy_1  |     /go/src/github.com/changkun/occamy/protocol/io.go:21 +0x49
occamy_1  | bufio.(*Reader).fill(0xc0001c05a0)
occamy_1  |     /usr/local/go/src/bufio/bufio.go:100 +0x103
occamy_1  | bufio.(*Reader).ReadSlice(0xc0001c05a0, 0xc00048e13b, 0x28, 0xc0003a6b00, 0xc0001d6f58, 0x9cd85c, 0xc0001d6f28)
occamy_1  |     /usr/local/go/src/bufio/bufio.go:359 +0x3d
occamy_1  | bufio.(*Reader).ReadBytes(0xc0001c05a0, 0x3b, 0xc000394630, 0x28, 0x28, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/bufio/bufio.go:437 +0x73
occamy_1  | github.com/changkun/occamy/protocol.(*InstructionIO).ReadRaw(...)
occamy_1  |     /go/src/github.com/changkun/occamy/protocol/instruction.go:148
occamy_1  | github.com/changkun/occamy/server.(*Session).serveIO.func1(0xc0001c0600, 0xc0001c6c00, 0xc000264640, 0xc0003a6b00)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:175 +0x41
occamy_1  | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:172 +0xb8
occamy_1  |
occamy_1  | goroutine 48 [IO wait]:
occamy_1  | internal/poll.runtime_pollWait(0x7fb7cb3f2f20, 0x72, 0xffffffffffffffff)
occamy_1  |     /usr/local/go/src/runtime/netpoll.go:184 +0x55
occamy_1  | internal/poll.(*pollDesc).wait(0xc00008f998, 0x72, 0x2000, 0x2000, 0xffffffffffffffff)
occamy_1  |     /usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
occamy_1  | internal/poll.(*pollDesc).waitRead(...)
occamy_1  |     /usr/local/go/src/internal/poll/fd_poll_runtime.go:92
occamy_1  | internal/poll.(*FD).Read(0xc00008f980, 0xc0003d4000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/internal/poll/fd_unix.go:169 +0x1cf
occamy_1  | net.(*netFD).Read(0xc00008f980, 0xc0003d4000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/net/fd_unix.go:202 +0x4f
occamy_1  | net.(*conn).Read(0xc0000a6660, 0xc0003d4000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/net/net.go:184 +0x68
occamy_1  | bufio.(*Reader).fill(0xc0001c0540)
occamy_1  |     /usr/local/go/src/bufio/bufio.go:100 +0x103
occamy_1  | bufio.(*Reader).Peek(0xc0001c0540, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy_1  |     /usr/local/go/src/bufio/bufio.go:138 +0x4f
occamy_1  | github.com/gorilla/websocket.(*Conn).read(0xc0003a6b00, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy_1  |     /go/src/github.com/changkun/occamy/vendor/github.com/gorilla/websocket/conn.go:357 +0x40
occamy_1  | github.com/gorilla/websocket.(*Conn).advanceFrame(0xc0003a6b00, 0x0, 0x0, 0x0)
occamy_1  |     /go/src/github.com/changkun/occamy/vendor/github.com/gorilla/websocket/conn.go:787 +0x5c
occamy_1  | github.com/gorilla/websocket.(*Conn).NextReader(0xc0003a6b00, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy_1  |     /go/src/github.com/changkun/occamy/vendor/github.com/gorilla/websocket/conn.go:947 +0xa0
occamy_1  | github.com/gorilla/websocket.(*Conn).ReadMessage(0xc0003a6b00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy_1  |     /go/src/github.com/changkun/occamy/vendor/github.com/gorilla/websocket/conn.go:1028 +0x2f
occamy_1  | github.com/changkun/occamy/server.(*Session).serveIO.func2(0xc0001c0600, 0xc0001c6c00, 0xc000264640, 0xc0003a6b00)
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:190 +0x37
occamy_1  | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy_1  |     /go/src/github.com/changkun/occamy/server/session.go:187 +0xfb
occamy_1  |
occamy_1  | rax    0x0
occamy_1  | rbx    0x0
occamy_1  | rcx    0x7fb7caaba337
occamy_1  | rdx    0x6
occamy_1  | rdi    0x1
occamy_1  | rsi    0x17
occamy_1  | rbp    0x7fb7a67fbae0
occamy_1  | rsp    0x7fb7a67fb0a8
occamy_1  | r8     0x0
occamy_1  | r9     0x20
occamy_1  | r10    0x8
occamy_1  | r11    0x202
occamy_1  | r12    0x12
occamy_1  | r13    0x7fb7a67fb600
occamy_1  | r14    0x73
occamy_1  | r15    0x2
occamy_1  | rip    0x7fb7caaba337
occamy_1  | rflags 0x202
occamy_1  | cs     0x33
occamy_1  | fs     0x0
occamy_1  | gs     0x0
docker_occamy_1 exited with code 2

rdp 代理

大佬可以写个rdp 代理demo 嘛,通过freeRDP或windows本身远程桌面工具直接连接这个代理,就可以直接连到目标机器

unable to connect to windows rdp server

occamy log:

occamy | [GIN] 2020/09/16 - 08:05:09 | 200 | 22.489149ms | 117.74.128.130 | GET /api/v1/connect?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDAyNDYyMzEsImhvc3QiOiIxMDEuMTMzLjIzNC42NjozMzg5Iiwib3JpZ19pYXQiOjE2MDAyNDI2MzEsInBhc3N3b3JkIjoibGlhbmchMTIzIiwicHJvdG9jb2wiOiJyZHAiLCJ1c2VybmFtZSI6ImFkbWluaXN0cmF0b3IifQ.kD-gU3PWAMvW-lLdQ54tfJyEMVoeCgEBEkf2UrffU9s
occamy | time="2020-09-16T08:05:09Z" level=info msg="occamy-proxy: reading from desktop terminated."
occamy | time="2020-09-16T08:05:09Z" level=info msg="occamy-proxy: reading from client terminated."
occamy | time="2020-09-16T08:05:09Z" level=info msg="occamy-proxy: IO goroutines are terminated."
occamy | [GIN] 2020/09/16 - 08:06:42 | 304 | 77.559µs | 117.74.128.130 | GET /static/
occamy | [GIN] 2020/09/16 - 08:06:42 | 304 | 56.83µs | 117.74.128.130 | GET /static/css/app.6658f915.css
occamy | [GIN] 2020/09/16 - 08:06:42 | 304 | 37.928µs | 117.74.128.130 | GET /static/css/chunk-vendors.d39e9fad.css
occamy | [GIN] 2020/09/16 - 08:06:42 | 304 | 38.997µs | 117.74.128.130 | GET /static/js/app.7486a57b.js
occamy | [GIN] 2020/09/16 - 08:06:42 | 304 | 36.105µs | 117.74.128.130 | GET /static/js/chunk-vendors.58f2d251.js
occamy | [GIN] 2020/09/16 - 08:06:42 | 304 | 66.431µs | 117.74.128.130 | GET /static/fonts/element-icons.535877f5.woff
occamy | [GIN] 2020/09/16 - 08:07:33 | 200 | 99.664µs | 117.74.128.130 | POST /api/v1/login
occamy | time="2020-09-16T08:07:33Z" level=info msg="occamy-proxy: new session was created: $32a6116b-775e-4081-9228-5ad020c94332"
occamy | occamy-lib[139790149191424]: Parameter "console" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Parameter "ignore-cert" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Parameter "disable-auth" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: No security mode specified. Defaulting to RDP.
occamy | occamy-lib[139790149191424]: User resolution is 1024x768 at 96 DPI
occamy | occamy-lib[139790149191424]: Parameter "dpi" omitted. Using default value of 96.
occamy | occamy-lib[139790149191424]: Using resolution of 1024x768 at 96 DPI
occamy | occamy-lib[139790149191424]: Parameter "read-only" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Parameter "client-name" omitted. Using default value of "Guacamole RDP".
occamy | occamy-lib[139790149191424]: Parameter "enable-wallpaper" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Parameter "enable-theming" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Parameter "enable-font-smoothing" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Parameter "enable-full-window-drag" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Parameter "enable-desktop-composition" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Parameter "enable-menu-animations" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Parameter "disable-bitmap-caching" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Parameter "disable-offscreen-caching" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Parameter "disable-glyph-caching" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Parameter "color-depth" omitted. Using default value of 16.
occamy | occamy-lib[139790149191424]: Parameter "enable-printing" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Parameter "printer-name" omitted. Using default value of "Guacamole Printer".
occamy | occamy-lib[139790149191424]: Parameter "enable-drive" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Parameter "drive-name" omitted. Using default value of "Guacamole Filesystem".
occamy | occamy-lib[139790149191424]: Parameter "drive-path" omitted. Using default value of "".
occamy | occamy-lib[139790149191424]: Parameter "create-drive-path" omitted. Using default value of 0.
occamy | occamy-lib[139790149191424]: Resize method: none
occamy | occamy-lib[139790179628800]: Loading keymap "base"
occamy | occamy-lib[139790179628800]: Loading keymap "en-us-qwerty"
occamy | recv: Connection reset by peer
occamy | occamy-lib[139790179628800]: Error connecting to RDP server
occamy | time="2020-09-16T08:07:33Z" level=info msg="User @6946df3a-724c-47a5-aba7-296849607558 disconnected (0 users remain)"
occamy | time="2020-09-16T08:07:33Z" level=info msg="occamy-proxy: reading from client terminated."
occamy | time="2020-09-16T08:07:33Z" level=info msg="occamy-proxy: reading from desktop terminated."
occamy | time="2020-09-16T08:07:33Z" level=info msg="occamy-proxy: IO goroutines are terminated."

Change to a GIO client

Is your feature request related to a problem? Please describe.

The nature of maintaining a html5 canvas can be easily done using gio because of the nature of how gio works.
The advantage is that then Clients work in Browsers, Desktop and Mobile from the exact same code base.

Describe the solution you'd like

Write a GIO based client for Occamy.

Describe alternatives you've considered

https://github.com/deluan/bring also uses a canvas, but is not as performant or portable as using gio.

Additional context

Making a client with GIO that can quickly swap in images and also sense the mouse, touch and key presses is easy with gio because its inherently synergistic with how GIO is designed.

Here are the links. I would be happy to collaborate on this. Been using gio for a while now and its really getting better and better.

https://gioui.org/

Code:
https://github.com/gioui/gio
OR
https://git.sr.ht/~eliasnaur/gio

GIO works using only a GPU accelerated canvas and is 100% golang.
You can compile the same code for web ( wasm), desktop or Mobile.

Examples:
https://github.com/gioui/gio-example/

Extension components:
https://github.com/gioui/gio-x


Ironically, GIo makes it easy to share an App over VNC also. For example see this example of a headless rendering example.
https://github.com/gioui/gio-example/tree/main/opengl

SSH cannot be joined twice

Describe the bug
A cgo bug.

occamy    | [GIN] 2019/11/12 - 15:58:36 | 200 |       129.4µs |    172.16.238.1 | POST     /api/v1/login
occamy    | time="2019-11-12T15:58:36Z" level=info msg="occamy-proxy: new session was created: $818fc237-2f6c-4dec-811e-4e592fde989a"
occamy    | occamy-lib[139723837695744]: Parameter "scrollback" omitted. Using default value of 1000.
occamy    | occamy-lib[139723837695744]: Parameter "font-name" omitted. Using default value of "monospace".
occamy    | occamy-lib[139723837695744]: Parameter "font-size" omitted. Using default value of 12.
occamy    | occamy-lib[139723837695744]: Parameter "color-scheme" omitted. Using default value of "".
occamy    | occamy-lib[139723837695744]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[139723837695744]: Parameter "typescript-name" omitted. Using default value of "typescript".
occamy    | occamy-lib[139723837695744]: Parameter "create-typescript-path" omitted. Using default value of 0.
occamy    | occamy-lib[139723837695744]: Parameter "server-alive-interval" omitted. Using default value of 0.
occamy    | occamy-lib[139723837695744]: Parameter "backspace" omitted. Using default value of 127.
occamy    | occamy-lib[139723837695744]: Parameter "terminal-type" omitted. Using default value of "linux".
occamy    |
occamy    | (process:1): GLib-GObject-WARNING **: 15:58:36.572: cannot register existing type 'PangoFontMap'
occamy    |
occamy    | (process:1): GLib-CRITICAL **: 15:58:36.573: g_once_init_leave: assertion 'result != 0' failed
occamy    |
occamy    | (process:1): GLib-GObject-CRITICAL **: 15:58:36.573: g_type_register_static: assertion 'parent_type > 0' failed
occamy    |
occamy    | (process:1): GLib-CRITICAL **: 15:58:36.573: g_once_init_leave: assertion 'result != 0' failed
occamy    |
occamy    | (process:1): GLib-GObject-CRITICAL **: 15:58:36.573: g_type_register_static: assertion 'parent_type > 0' failed
occamy    |
occamy    | (process:1): GLib-GObject-WARNING **: 15:58:36.573: cannot register existing type 'PangoCairoFontMap'

full logs:

# changkun at ou-lmu.local in ~/dev/occamy
$ make run                                                                                                                                                                                                                    master ✖︎ [10:42:30]
cd docker && docker-compose up
Creating network "docker_occamy_network" with driver "bridge"
Creating rdp ... done
Creating vnc ... done
Creating ssh    ... done
Creating occamy ... done
Attaching to rdp, vnc, ssh, occamy
rdp       | *** Running /etc/my_init.d/00_regen_ssh_host_keys.sh...
vnc       | USER_ID: 1000, GROUP_ID: 0
occamy    | [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
occamy    | 
occamy    | [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
occamy    |  - using env:       export GIN_MODE=release
occamy    |  - using code:      gin.SetMode(gin.ReleaseMode)
occamy    | 
occamy    | [GIN-debug] GET    /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (3 handlers)
occamy    | [GIN-debug] HEAD   /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (3 handlers)
occamy    | [GIN-debug] GET    /api/v1/ping              --> github.com/changkun/occamy/server.(*proxy).Ping-fm (3 handlers)
occamy    | [GIN-debug] POST   /api/v1/login             --> github.com/appleboy/gin-jwt/v2.(*GinJWTMiddleware).LoginHandler-fm (3 handlers)
occamy    | [GIN-debug] GET    /api/v1/connect           --> github.com/changkun/occamy/server.(*proxy).serveWS-fm (4 handlers)
rdp       | *** Running /etc/rc.local...
vnc       | nss_wrapper location: /usr/lib/libnss_wrapper.so
occamy    | [GIN-debug] GET    /debug/pprof/             --> github.com/changkun/occamy/server.profile.func1.1 (3 handlers)
occamy    | [GIN-debug] GET    /debug/pprof/cmdline      --> github.com/changkun/occamy/server.profile.func1.1 (3 handlers)
occamy    | [GIN-debug] GET    /debug/pprof/profile      --> github.com/changkun/occamy/server.profile.func1.1 (3 handlers)
occamy    | [GIN-debug] POST   /debug/pprof/symbol       --> github.com/changkun/occamy/server.profile.func1.1 (3 handlers)
occamy    | [GIN-debug] GET    /debug/pprof/symbol       --> github.com/changkun/occamy/server.profile.func1.1 (3 handlers)
occamy    | [GIN-debug] GET    /debug/pprof/trace        --> github.com/changkun/occamy/server.profile.func1.1 (3 handlers)
occamy    | [GIN-debug] GET    /debug/pprof/block        --> github.com/changkun/occamy/server.profile.func1.1 (3 handlers)
occamy    | [GIN-debug] GET    /debug/pprof/goroutine    --> github.com/changkun/occamy/server.profile.func1.1 (3 handlers)
occamy    | [GIN-debug] GET    /debug/pprof/heap         --> github.com/changkun/occamy/server.profile.func1.1 (3 handlers)
occamy    | [GIN-debug] GET    /debug/pprof/mutex        --> github.com/changkun/occamy/server.profile.func1.1 (3 handlers)
occamy    | [GIN-debug] GET    /debug/pprof/threadcreate --> github.com/changkun/occamy/server.profile.func1.1 (3 handlers)
occamy    | time="2019-12-30T09:43:04Z" level=info msg="occamy-proxy: starting at http://0.0.0.0:5636..."
rdp       | *** Booting runit daemon...
rdp       | *** Runit started as PID 9
rdp       | tail: unrecognized file system type 0x794c7630 for ‘/var/log/syslog’. please report this to [email protected]. reverting to polling
vnc       | 
vnc       | ------------------ update chromium-browser.init ------------------
vnc       | 
vnc       | ... set window size 1280 x 1024 as chrome window size!
vnc       | 
vnc       | 
vnc       | ------------------ change VNC password  ------------------
vnc       | 
vnc       | ------------------ start noVNC  ----------------------------
vnc       | 
vnc       | ------------------ start VNC server ------------------------
vnc       | remove old vnc locks to be a reattachable container
vnc       | start vncserver with param: VNC_COL_DEPTH=24, VNC_RESOLUTION=1280x1024
vnc       | ...
vnc       | start window manager
vnc       | ...
vnc       | 
vnc       | 
vnc       | ------------------ VNC environment started ------------------
vnc       | 
vnc       | VNCSERVER started on DISPLAY= :1 
vnc       |     => connect via VNC viewer with 172.16.238.11:5901
vnc       | 
vnc       | noVNC HTML client started:
vnc       |     => connect via http://172.16.238.11:6901/?password=...
vnc       | 
occamy    | [GIN] 2019/12/30 - 09:43:08 | 304 |       199.3µs |    172.16.238.1 | GET      /static/
occamy    | [GIN] 2019/12/30 - 09:43:08 | 304 |       125.8µs |    172.16.238.1 | GET      /static/css/app.be8a3ac4.css
occamy    | [GIN] 2019/12/30 - 09:43:08 | 304 |       123.2µs |    172.16.238.1 | GET      /static/css/chunk-vendors.d39e9fad.css
occamy    | [GIN] 2019/12/30 - 09:43:08 | 304 |         131µs |    172.16.238.1 | GET      /static/js/app.c3ca7561.js
occamy    | [GIN] 2019/12/30 - 09:43:08 | 304 |       144.5µs |    172.16.238.1 | GET      /static/js/chunk-vendors.f7f9f78c.js
occamy    | [GIN] 2019/12/30 - 09:43:09 | 304 |       139.9µs |    172.16.238.1 | GET      /static/fonts/element-icons.535877f5.woff
occamy    | [GIN] 2019/12/30 - 09:43:12 | 200 |       441.1µs |    172.16.238.1 | POST     /api/v1/login
occamy    | time="2019-12-30T09:43:12Z" level=info msg="occamy-proxy: new session was created: $7409274d-c28c-44f3-8dad-efab02764eec"
occamy    | occamy-lib[140056132056832]: Parameter "font-name" omitted. Using default value of "monospace".
occamy    | occamy-lib[140056132056832]: Parameter "font-size" omitted. Using default value of 12.
occamy    | occamy-lib[140056132056832]: Parameter "color-scheme" omitted. Using default value of "".
occamy    | occamy-lib[140056132056832]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[140056132056832]: Parameter "typescript-name" omitted. Using default value of "typescript".
occamy    | occamy-lib[140056132056832]: Parameter "create-typescript-path" omitted. Using default value of 0.
occamy    | occamy-lib[140056132056832]: Parameter "server-alive-interval" omitted. Using default value of 0.
occamy    | occamy-lib[140056132056832]: Parameter "backspace" omitted. Using default value of 127.
occamy    | occamy-lib[140056132056832]: Parameter "terminal-type" omitted. Using default value of "linux".
occamy    | occamy-lib[140056079177472]: Successfully connected to host 172.16.238.13, port 22
occamy    | occamy-lib[140056079177472]: No known host keys provided, host identity will not be verified.
occamy    | occamy-lib[140056079177472]: Supported authentication methods: publickey,password
occamy    | occamy-lib[140056079177472]: SSH connection successful.
occamy    | [GIN] 2019/12/30 - 09:43:17 | 304 |       434.5µs |    172.16.238.1 | GET      /static/
occamy    | time="2019-12-30T09:43:17Z" level=info msg="User @d80254fd-2d02-441f-8eab-0491e4b814aa disconnected (0 users remain)"
occamy    | time="2019-12-30T09:43:17Z" level=info msg="occamy-proxy: reading from desktop terminated."
occamy    | time="2019-12-30T09:43:17Z" level=info msg="occamy-proxy: reading from client terminated."
occamy    | time="2019-12-30T09:43:17Z" level=info msg="occamy-proxy: IO goroutines are terminated."
occamy    | occamy-lib[140056079177472]: SSH connection ended.
occamy    | [GIN] 2019/12/30 - 09:43:17 | 200 |    5.7554394s |    172.16.238.1 | GET      /api/v1/connect?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1Nzc3MDI1ODQsImhvc3QiOiIxNzIuMTYuMjM4LjEzOjIyIiwib3JpZ19pYXQiOjE1Nzc2OTg5ODQsInBhc3N3b3JkIjoicm9vdCIsInByb3RvY29sIjoic3NoIiwidXNlcm5hbWUiOiJyb290In0.Azdhzbh3UohcU-CVcK0fYsAl0vcYBnyvqw28j4ZcEQA
occamy    | [GIN] 2019/12/30 - 09:43:20 | 200 |       152.7µs |    172.16.238.1 | POST     /api/v1/login
occamy    | time="2019-12-30T09:43:20Z" level=info msg="occamy-proxy: new session was created: $5d9afc18-4bc4-4225-8d49-c8f1dac7f7d2"
occamy    | occamy-lib[140055771334400]: Parameter "font-name" omitted. Using default value of "monospace".
occamy    | occamy-lib[140055771334400]: Parameter "font-size" omitted. Using default value of 12.
occamy    | occamy-lib[140055771334400]: Parameter "color-scheme" omitted. Using default value of "".
occamy    | occamy-lib[140055771334400]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[140055771334400]: Parameter "typescript-name" omitted. Using default value of "typescript".
occamy    | occamy-lib[140055771334400]: Parameter "create-typescript-path" omitted. Using default value of 0.
occamy    | occamy-lib[140055771334400]: Parameter "server-alive-interval" omitted. Using default value of 0.
occamy    | occamy-lib[140055771334400]: Parameter "backspace" omitted. Using default value of 127.
occamy    | occamy-lib[140055771334400]: Parameter "terminal-type" omitted. Using default value of "linux".
occamy    | 
occamy    | (process:1): GLib-GObject-WARNING **: 09:43:20.157: cannot register existing type 'PangoFontMap'
occamy    | 
occamy    | (process:1): GLib-CRITICAL **: 09:43:20.157: g_once_init_leave: assertion 'result != 0' failed
occamy    | 
occamy    | (process:1): GLib-GObject-CRITICAL **: 09:43:20.157: g_type_register_static: assertion 'parent_type > 0' failed
occamy    | 
occamy    | (process:1): GLib-CRITICAL **: 09:43:20.157: g_once_init_leave: assertion 'result != 0' failed
occamy    | 
occamy    | (process:1): GLib-GObject-CRITICAL **: 09:43:20.157: g_type_register_static: assertion 'parent_type > 0' failed
occamy    | 
occamy    | (process:1): GLib-GObject-WARNING **: 09:43:20.157: cannot register existing type 'PangoCairoFontMap'

Eliminate handshake process in Guacamole protocol

Is your feature request related to a problem? Please describe.
The current connection can be established with a required handshake phase in Guacamole protocol.

func (s *Session) handshake(conn *protocol.InstructionIO, ws *websocket.Conn, conf *config.JWT) error {

It is unnecessary for the communication because the handshake between client and server is done by JWT authentication.

Describe the solution you'd like
A doable approach:

client --> send JWT --> Occamy --> set guac_user's info --> response ready

This approach simplifies the following Guacamole instruction: size, audio, video, image, args, ready.

Panics under high pressure

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)

rfbInitClient segmentation fault on macOS native builds

Describe the bug
segmentation fault exit, debug shows the error hanppens in between of

    if (vnc_settings->encodings)
        rfb_client->appData.encodingsString = strdup(vnc_settings->encodings);

and

    if (rfbInitClient(rfb_client, NULL, NULL)) {

which means it is because of the rfbInitClient. Not sure why.

To Reproduce
Steps to reproduce the behavior:

  1. build occamy natively on vnc branch
  2. run occamyd
  3. access web client
  4. connect to vnc container
  5. see the error

Expected behavior
connect normally

Desktop (please complete the following information):

  • OS: macOS
  • Browser chrome

Concurrent Join panic

Describe the bug
Two users connect to the same server concurrently panics the entire server.

vnc       |
occamy    | [GIN] 2019/11/05 - 08:57:15 | 200 |       361.4µs |    172.16.238.1 | POST     /api/v1/login
occamy    | time="2019-11-05T08:57:15Z" level=info msg="occamy-proxy: new session was created: $77a8a52e-5989-4b82-a187-dda1949495b1"
occamy    | occamy-lib[140717288584960]: Parameter "swap-red-blue" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "color-depth" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "dest-port" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "encodings" omitted. Using default value of "zrle ultra copyrect hextile zlib corre rre raw".
occamy    | occamy-lib[140717288584960]: Parameter "autoretry" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "reverse-connect" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "listen-timeout" omitted. Using default value of 5000.
occamy    | occamy-lib[140717288584960]: Parameter "enable-audio" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "recording-name" omitted. Using default value of "recording".
occamy    | occamy-lib[140717288584960]: Parameter "recording-exclude-output" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "recording-exclude-mouse" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "recording-include-keys" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "create-recording-path" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: User "@ed27dbda-eca0-4434-a7af-560808551d92" joined connection "$77a8a52e-5989-4b82-a187-dda1949495b1" (1 users now present)
occamy    | occamy-lib[140717003364096]: Server completed frame 26198772ms.
occamy    | occamy-lib[140716986578688]: User confirmation of frame 26198772ms received at 26198790ms (processing_lag=0ms)
occamy    | occamy-lib[140717003364096]: Server completed frame 26199779ms.
occamy    | occamy-lib[140716986578688]: User confirmation of frame 26199779ms received at 26199783ms (processing_lag=0ms)
occamy    | occamy-lib[140717003364096]: Server completed frame 26200784ms.
occamy    | occamy-lib[140716986578688]: User confirmation of frame 26200784ms received at 26200788ms (processing_lag=0ms)
occamy    | occamy-lib[140717003364096]: Server completed frame 26201789ms.
occamy    | occamy-lib[140716986578688]: User confirmation of frame 26201789ms received at 26201792ms (processing_lag=0ms)
occamy    | occamy-lib[140717003364096]: Server completed frame 26202203ms.
occamy    | occamy-lib[140716986578688]: User confirmation of frame 26202203ms received at 26202206ms (processing_lag=0ms)
occamy    | occamy-lib[140717003364096]: Server completed frame 26203205ms.
occamy    | occamy-lib[140716986578688]: User confirmation of frame 26203205ms received at 26203206ms (processing_lag=0ms)
occamy    | occamy-lib[140717003364096]: Server completed frame 26204210ms.
occamy    | occamy-lib[140716986578688]: User confirmation of frame 26204210ms received at 26204212ms (processing_lag=1ms)
occamy    | occamy-lib[140717003364096]: Server completed frame 26205214ms.
occamy    | occamy-lib[140716986578688]: User confirmation of frame 26205214ms received at 26205216ms (processing_lag=1ms)
occamy    | occamy-lib[140717003364096]: Server completed frame 26206215ms.
occamy    | occamy-lib[140716986578688]: User confirmation of frame 26206215ms received at 26206218ms (processing_lag=2ms)
occamy    | occamy-lib[140717003364096]: Server completed frame 26207217ms.
occamy    | occamy-lib[140716986578688]: User confirmation of frame 26207217ms received at 26207219ms (processing_lag=1ms)
occamy    | occamy-lib[140717003364096]: Server completed frame 26208223ms.
occamy    | occamy-lib[140716986578688]: User confirmation of frame 26208223ms received at 26208225ms (processing_lag=1ms)
occamy    | [GIN] 2019/11/05 - 08:57:27 | 200 |   11.5170604s |    172.16.238.1 | GET      /api/v1/connect?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzI5NDc4MjksImhvc3QiOiIxNzIuMTYuMjM4LjExOjU5MDEiLCJvcmlnX2lhdCI6MTU3Mjk0NDIyOSwicGFzc3dvcmQiOiJ2bmNwYXNzd29yZCIsInByb3RvY29sIjoidm5jIiwidXNlcm5hbWUiOiIifQ.9hE8OA7o-lIW1kCZcTobNijro6gSCKuD3LdtCSMCNZw
occamy    | occamy-lib[140717288584960]: User "@ed27dbda-eca0-4434-a7af-560808551d92" disconnected (0 users remain)
occamy    | occamy-lib[140717003364096]: Server completed frame 26209226ms.
occamy    | occamy-lib[140717003364096]: Internal VNC client disconnected
occamy    | time="2019-11-05T08:57:30Z" level=info msg="occamy-proxy: new session was created: $d8f7920f-8ed7-4d7e-b6a4-01b7264ecbd8"
occamy    | occamy-lib[140717288584960]: Cursor rendering: local
occamy    | occamy-lib[140717288584960]: Parameter "swap-red-blue" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "color-depth" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "dest-port" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "encodings" omitted. Using default value of "zrle ultra copyrect hextile zlib corre rre raw".
occamy    | occamy-lib[140717288584960]: Parameter "autoretry" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "reverse-connect" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "listen-timeout" omitted. Using default value of 5000.
occamy    | occamy-lib[140717288584960]: Parameter "enable-audio" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "recording-name" omitted. Using default value of "recording".
occamy    | occamy-lib[140717288584960]: Parameter "recording-exclude-output" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "recording-exclude-mouse" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "recording-include-keys" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: Parameter "create-recording-path" omitted. Using default value of 0.
occamy    | occamy-lib[140717288584960]: User "@0f5f5468-4151-4c9c-96b5-fb80f7ecdb7c" joined connection "$d8f7920f-8ed7-4d7e-b6a4-01b7264ecbd8" (1 users now present)
occamy    | occamy-lib[140716994971392]: Cursor rendering: local
occamy    | occamy-lib[140716994971392]: Parameter "swap-red-blue" omitted. Using default value of 0.
occamy    | occamy-lib[140716994971392]: Parameter "read-only" omitted. Using default value of 0.
occamy    | occamy-lib[140716994971392]: Parameter "color-depth" omitted. Using default value of 0.
occamy    | occamy-lib[140716994971392]: Parameter "dest-port" omitted. Using default value of 0.
occamy    | occamy-lib[140716994971392]: Parameter "encodings" omitted. Using default value of "zrle ultra copyrect hextile zlib corre rre raw".
occamy    | occamy-lib[140716994971392]: Parameter "autoretry" omitted. Using default value of 0.
occamy    | occamy-lib[140716994971392]: Parameter "reverse-connect" omitted. Using default value of 0.
occamy    | occamy-lib[140716994971392]: Parameter "listen-timeout" omitted. Using default value of 5000.
occamy    | occamy-lib[140716994971392]: Parameter "enable-audio" omitted. Using default value of 0.
occamy    | occamy-lib[140716994971392]: Parameter "recording-name" omitted. Using default value of "recording".
occamy    | occamy-lib[140716994971392]: Parameter "recording-exclude-output" omitted. Using default value of 0.
occamy    | occamy-lib[140716994971392]: Parameter "recording-exclude-mouse" omitted. Using default value of 0.
occamy    | occamy-lib[140716994971392]: Parameter "recording-include-keys" omitted. Using default value of 0.
occamy    | occamy-lib[140716994971392]: Parameter "create-recording-path" omitted. Using default value of 0.
occamy    | fatal error: unexpected signal during runtime execution
occamy    | [signal SIGSEGV: segmentation violation code=0x1 addr=0x38 pc=0x7ffb597d8cc0]
occamy    |
occamy    | runtime stack:
occamy    | runtime.throw(0xb8a677, 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 22 [syscall]:
occamy    | runtime.cgocall(0x9f6cb0, 0xc00003cde0, 0x0)
occamy    |     /usr/local/go/src/runtime/cgocall.go:128 +0x5b fp=0xc00003cdb0 sp=0xc00003cd78 pc=0x4050bb
occamy    | github.com/changkun/occamy/lib._Cfunc_guac_user_handle_connection(0x7ffb4c00e7c0, 0x7ffb00e4e1c0, 0x0)
occamy    |     _cgo_gotypes.go:399 +0x4d fp=0xc00003cde0 sp=0xc00003cdb0 pc=0x9f011d
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection.func1(0xc00000e120, 0x43015a)
occamy    |     /go/src/github.com/changkun/occamy/lib/user.go:59 +0x66 fp=0xc00003ce20 sp=0xc00003cde0 pc=0x9f1246
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection(0xc00000e120, 0xc000106e60, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/lib/user.go:59 +0x2f fp=0xc00003ce50 sp=0xc00003ce20 pc=0x9f0c6f
occamy    | github.com/changkun/occamy/server.(*Session).Join.func1(0xc0000f5f80, 0xc, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:87 +0x2e0 fp=0xc00003cfc8 sp=0xc00003ce50 pc=0x9f5ff0
occamy    | runtime.goexit()
occamy    |     /usr/local/go/src/runtime/asm_amd64.s:1357 +0x1 fp=0xc00003cfd0 sp=0xc00003cfc8 pc=0x461041
occamy    | created by github.com/changkun/occamy/server.(*Session).Join
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:68 +0x132
occamy    |
occamy    | goroutine 1 [IO wait, locked to thread]:
occamy    | internal/poll.runtime_pollWait(0x7ffb59ce3ed8, 0x72, 0x0)
occamy    |     /usr/local/go/src/runtime/netpoll.go:184 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc000222198, 0x72, 0x0, 0x0, 0xb73fe7)
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(0xc000222180, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/internal/poll/fd_unix.go:384 +0x1f8
occamy    | net.(*netFD).accept(0xc000222180, 0xc000203c60, 0x6d91a4, 0xc000254180)
occamy    |     /usr/local/go/src/net/fd_unix.go:238 +0x42
occamy    | net.(*TCPListener).accept(0xc0001066a0, 0x5dc1397a, 0xc000203c60, 0x484806)
occamy    |     /usr/local/go/src/net/tcpsock_posix.go:139 +0x32
occamy    | net.(*TCPListener).Accept(0xc0001066a0, 0xc000203cb0, 0x18, 0xc000000180, 0x6d86be)
occamy    |     /usr/local/go/src/net/tcpsock.go:261 +0x47
occamy    | net/http.(*Server).Serve(0xc0002540e0, 0xc84840, 0xc0001066a0, 0x0, 0x0)
occamy    |     /usr/local/go/src/net/http/server.go:2896 +0x286
occamy    | net/http.(*Server).ListenAndServe(0xc0002540e0, 0x4, 0xb87f1c)
occamy    |     /usr/local/go/src/net/http/server.go:2825 +0xb7
occamy    | github.com/changkun/occamy/server.(*proxy).serve(0xc000106300)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:71 +0x1ec
occamy    | github.com/changkun/occamy/server.Run()
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:43 +0xfa
occamy    | main.main()
occamy    |     /go/src/github.com/changkun/occamy/occamy.go:18 +0x20
occamy    |
occamy    | goroutine 51 [IO wait]:
occamy    | internal/poll.runtime_pollWait(0x7ffb59ce3e08, 0x72, 0xffffffffffffffff)
occamy    |     /usr/local/go/src/runtime/netpoll.go:184 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc000222218, 0x72, 0x1000, 0x1000, 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(0xc000222200, 0xc000274000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/internal/poll/fd_unix.go:169 +0x1cf
occamy    | net.(*netFD).Read(0xc000222200, 0xc000274000, 0x1000, 0x1000, 0xc0000845c0, 0xc0001017e8, 0x6cd9d3)
occamy    |     /usr/local/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc000104118, 0xc000274000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/net/net.go:184 +0x68
occamy    | net/http.(*connReader).Read(0xc00009b470, 0xc000274000, 0x1000, 0x1000, 0xb, 0xb72de9, 0x203000)
occamy    |     /usr/local/go/src/net/http/server.go:785 +0xf4
occamy    | bufio.(*Reader).fill(0xc0000b2420)
occamy    |     /usr/local/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).ReadSlice(0xc0000b2420, 0xa, 0x28, 0xc0001019a8, 0x40e3e6, 0xc0000f0100, 0x100)
occamy    |     /usr/local/go/src/bufio/bufio.go:359 +0x3d
occamy    | bufio.(*Reader).ReadLine(0xc0000b2420, 0x10, 0xc000044700, 0x7ffb59dc3d98, 0x0, 0x40ec58, 0x30)
occamy    |     /usr/local/go/src/bufio/bufio.go:388 +0x34
occamy    | net/textproto.(*Reader).readLineSlice(0xc00009b4d0, 0xc0000f0100, 0xc000222200, 0x0, 0x0, 0x7ffb59d25ec8)
occamy    |     /usr/local/go/src/net/textproto/reader.go:57 +0x6c
occamy    | net/textproto.(*Reader).ReadLine(...)
occamy    |     /usr/local/go/src/net/textproto/reader.go:38
occamy    | net/http.readRequest(0xc0000b2420, 0x0, 0xc0000f0100, 0x0, 0x0)
occamy    |     /usr/local/go/src/net/http/request.go:1012 +0x92
occamy    | net/http.(*conn).readRequest(0xc000214320, 0xc86500, 0xc000084500, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/net/http/server.go:965 +0x15f
occamy    | net/http.(*conn).serve(0xc000214320, 0xc86500, 0xc000084500)
occamy    |     /usr/local/go/src/net/http/server.go:1817 +0x6d4
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 34 [syscall]:
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 50 [chan receive]:
occamy    | github.com/changkun/occamy/server.(*proxy).serve.func1(0xc0002540e0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:62 +0xe0
occamy    | created by github.com/changkun/occamy/server.(*proxy).serve
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:59 +0x14f
occamy    |
occamy    | goroutine 52 [IO wait]:
occamy    | internal/poll.runtime_pollWait(0x7ffb59ce3d38, 0x72, 0xffffffffffffffff)
occamy    |     /usr/local/go/src/runtime/netpoll.go:184 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc000222298, 0x72, 0x1000, 0x1000, 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(0xc000222280, 0xc000245000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/internal/poll/fd_unix.go:169 +0x1cf
occamy    | net.(*netFD).Read(0xc000222280, 0xc000245000, 0x1000, 0x1000, 0xc0000fb9e8, 0x4cb79d, 0xc000222280)
occamy    |     /usr/local/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc000104120, 0xc000245000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/net/net.go:184 +0x68
occamy    | net/http.(*connReader).Read(0xc0000f5260, 0xc000245000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/net/http/server.go:785 +0xf4
occamy    | bufio.(*Reader).fill(0xc0000f2d80)
occamy    |     /usr/local/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).Peek(0xc0000f2d80, 0x4, 0x0, 0x0, 0x0, 0x0, 0xc0000fbad0)
occamy    |     /usr/local/go/src/bufio/bufio.go:138 +0x4f
occamy    | net/http.(*conn).readRequest(0xc0002143c0, 0xc86500, 0xc0001ea440, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/net/http/server.go:962 +0xb3b
occamy    | net/http.(*conn).serve(0xc0002143c0, 0xc86500, 0xc0001ea440)
occamy    |     /usr/local/go/src/net/http/server.go:1817 +0x6d4
occamy    | created by net/http.(*Server).Serve
occamy    |     /usr/local/go/src/net/http/server.go:2927 +0x38e
occamy    |
occamy    | goroutine 57 [chan receive]:
occamy    | github.com/changkun/occamy/server.(*Session).serveIO(0xc0000f5f80, 0xc0000aa360, 0xc0001dc6e0, 0xc0000ff668, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:202 +0x11b
occamy    | github.com/changkun/occamy/server.(*Session).Join(0xc0000f5f80, 0xc0001dc6e0, 0xc0000ff668, 0x0, 0xc0000ff560, 0x1, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:104 +0x20b
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc000106300, 0xc0001dc6e0, 0xc0000ff668, 0xc000296100, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:208 +0x3a6
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc000106300, 0xc0001da2c0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:196 +0x436
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0001da2c0)
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(0xc00023c120, 0xc0001da2c0)
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(0xc0001da2c0)
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(0xc0001da2c0)
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(0xc0001da2c0)
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(0xc0001da2c0)
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(0xc0001da2c0)
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(0xc0001da2c0)
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(0xc0002163c0, 0xc0001da2c0)
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(0xc0002163c0, 0xc84b00, 0xc000066000, 0xc000296100)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002540e0, 0xc84b00, 0xc000066000, 0xc000296100)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc000214500, 0xc86500, 0xc00006a180)
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 60 [syscall]:
occamy    | github.com/changkun/occamy/lib._Cfunc_guac_user_handle_connection(0x7ffb440010b0, 0x7ffb00e4e1c0, 0x0)
occamy    |     _cgo_gotypes.go:399 +0x4d
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection.func1(0xc000123ce0, 0x43015a)
occamy    |     /go/src/github.com/changkun/occamy/lib/user.go:59 +0x66
occamy    | github.com/changkun/occamy/lib.(*User).HandleConnection(0xc000123ce0, 0xc000106e60, 0x1)
occamy    |     /go/src/github.com/changkun/occamy/lib/user.go:59 +0x2f
occamy    | github.com/changkun/occamy/server.(*Session).Join.func1(0xc0000f5f80, 0xa, 0x1)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:87 +0x2e0
occamy    | created by github.com/changkun/occamy/server.(*Session).Join
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:68 +0x132
occamy    |
occamy    | goroutine 58 [chan receive, locked to thread]:
occamy    | github.com/changkun/occamy/server.(*Session).serveIO(0xc0000f5f80, 0xc000106ec0, 0xc000280c60, 0xc0000fd668, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:202 +0x11b
occamy    | github.com/changkun/occamy/server.(*Session).Join(0xc0000f5f80, 0xc000280c60, 0xc0000fd668, 0x1, 0xc0000fd560, 0x1, 0x1)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:104 +0x20b
occamy    | github.com/changkun/occamy/server.(*proxy).routeConn(0xc000106300, 0xc000280c60, 0xc0000fd668, 0xc000296200, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:220 +0x268
occamy    | github.com/changkun/occamy/server.(*proxy).serveWS(0xc000106300, 0xc0002420b0)
occamy    |     /go/src/github.com/changkun/occamy/server/connection.go:196 +0x436
occamy    | github.com/gin-gonic/gin.(*Context).Next(0xc0002420b0)
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(0xc00023c120, 0xc0002420b0)
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(0xc0002420b0)
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(0xc0002420b0)
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(0xc0002420b0)
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(0xc0002420b0)
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(0xc0002420b0)
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(0xc0002420b0)
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(0xc0002163c0, 0xc0002420b0)
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(0xc0002163c0, 0xc84b00, 0xc000254380, 0xc000296200)
occamy    |     /go/src/github.com/changkun/occamy/vendor/github.com/gin-gonic/gin/gin.go:351 +0x134
occamy    | net/http.serverHandler.ServeHTTP(0xc0002540e0, 0xc84b00, 0xc000254380, 0xc000296200)
occamy    |     /usr/local/go/src/net/http/server.go:2802 +0xa4
occamy    | net/http.(*conn).serve(0xc0002145a0, 0xc86500, 0xc00006a240)
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 61 [syscall]:
occamy    | syscall.Syscall(0x0, 0xb, 0xc00036c000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/syscall/asm_linux_amd64.s:18 +0x5
occamy    | syscall.read(0xb, 0xc00036c000, 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(0xb, 0xc00036c000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/protocol/io.go:21 +0x49
occamy    | bufio.(*Reader).fill(0xc0000f33e0)
occamy    |     /usr/local/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).ReadSlice(0xc0000f33e0, 0x3b, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/bufio/bufio.go:359 +0x3d
occamy    | bufio.(*Reader).ReadBytes(0xc0000f33e0, 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(0xc0000f3440, 0xc000102e50, 0xc000106ec0, 0xc000280c60)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:175 +0x41
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:172 +0xb8
occamy    |
occamy    | goroutine 62 [IO wait]:
occamy    | internal/poll.runtime_pollWait(0x7ffb59ce3b98, 0x72, 0xffffffffffffffff)
occamy    |     /usr/local/go/src/runtime/netpoll.go:184 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc000222618, 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(0xc000222600, 0xc000064000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/internal/poll/fd_unix.go:169 +0x1cf
occamy    | net.(*netFD).Read(0xc000222600, 0xc000064000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc000104538, 0xc000064000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/net/net.go:184 +0x68
occamy    | bufio.(*Reader).fill(0xc0000f3380)
occamy    |     /usr/local/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).Peek(0xc0000f3380, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/bufio/bufio.go:138 +0x4f
occamy    | github.com/gorilla/websocket.(*Conn).read(0xc000280c60, 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(0xc000280c60, 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(0xc000280c60, 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(0xc000280c60, 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(0xc0000f3440, 0xc000102e50, 0xc000106ec0, 0xc000280c60)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:190 +0x37
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:187 +0xfb
occamy    |
occamy    | goroutine 23 [syscall]:
occamy    | syscall.Syscall(0x0, 0xd, 0xc00037c000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/syscall/asm_linux_amd64.s:18 +0x5
occamy    | syscall.read(0xd, 0xc00037c000, 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(0xd, 0xc00037c000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /go/src/github.com/changkun/occamy/protocol/io.go:21 +0x49
occamy    | bufio.(*Reader).fill(0xc0000b2540)
occamy    |     /usr/local/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).ReadSlice(0xc0000b2540, 0x3b, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/bufio/bufio.go:359 +0x3d
occamy    | bufio.(*Reader).ReadBytes(0xc0000b2540, 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(0xc0000b25a0, 0xc0000a0880, 0xc0000aa360, 0xc0001dc6e0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:175 +0x41
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:172 +0xb8
occamy    |
occamy    | goroutine 24 [IO wait]:
occamy    | internal/poll.runtime_pollWait(0x7ffb59ce3c68, 0x72, 0xffffffffffffffff)
occamy    |     /usr/local/go/src/runtime/netpoll.go:184 +0x55
occamy    | internal/poll.(*pollDesc).wait(0xc000222598, 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(0xc000222580, 0xc00035c000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/internal/poll/fd_unix.go:169 +0x1cf
occamy    | net.(*netFD).Read(0xc000222580, 0xc00035c000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/net/fd_unix.go:202 +0x4f
occamy    | net.(*conn).Read(0xc000104530, 0xc00035c000, 0x2000, 0x2000, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/net/net.go:184 +0x68
occamy    | bufio.(*Reader).fill(0xc00013ec00)
occamy    |     /usr/local/go/src/bufio/bufio.go:100 +0x103
occamy    | bufio.(*Reader).Peek(0xc00013ec00, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
occamy    |     /usr/local/go/src/bufio/bufio.go:138 +0x4f
occamy    | github.com/gorilla/websocket.(*Conn).read(0xc0001dc6e0, 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(0xc0001dc6e0, 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(0xc0001dc6e0, 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(0xc0001dc6e0, 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(0xc0000b25a0, 0xc0000a0880, 0xc0000aa360, 0xc0001dc6e0)
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:190 +0x37
occamy    | created by github.com/changkun/occamy/server.(*Session).serveIO
occamy    |     /go/src/github.com/changkun/occamy/server/session.go:187 +0xfb

provide guidelines to install from source

Describe the bug

Hi I'm new and would like doing some code investigation to see if could be good for my project with a few additions, but I can not install from github sources .

After install libcairo2 and libguac under ubuntu 18.04 this error happens.

vant@vant-N2x0WU:~/go/src/github.com$ go get github.com/changkun/occamy
# github.com/changkun/occamy/lib
/tmp/go-build751212863/b135/_x002.o: En la función `_cgo_84b46eb4f0ae_Cfunc_guac_client_load_plugin':
/tmp/go-build/cgo-gcc-prolog:96: referencia a `guac_client_load_plugin' sin definir
/tmp/go-build751212863/b135/_x005.o: En la función `_cgo_84b46eb4f0ae_Cfunc_guac_user_alloc':
/tmp/go-build/cgo-gcc-prolog:147: referencia a `guac_user_alloc' sin definir
/tmp/go-build751212863/b135/_x005.o: En la función `_cgo_84b46eb4f0ae_Cfunc_guac_client_add_user':
/tmp/go-build/cgo-gcc-prolog:82: referencia a `guac_client_add_user' sin definir
/tmp/go-build751212863/b135/_x005.o: En la función `_cgo_84b46eb4f0ae_Cfunc_guac_client_remove_user':
/tmp/go-build/cgo-gcc-prolog:95: referencia a `guac_client_remove_user' sin definir
/tmp/go-build751212863/b135/_x005.o: En la función `_cgo_84b46eb4f0ae_Cfunc_guac_user_free':
/tmp/go-build/cgo-gcc-prolog:162: referencia a `guac_user_free' sin definir
/tmp/go-build751212863/b135/_x005.o: En la función `_cgo_84b46eb4f0ae_Cfunc_guac_user_input_thread':
/tmp/go-build/cgo-gcc-prolog:176: referencia a `guac_user_input_thread' sin definir
collect2: error: ld returned 1 exit status

To Reproduce

 sudo apt-get install libcairo2-dev
 sudo apt-get install libguac-dev
 go get github.com/changkun/occamy

Expected behavior

download code without errors

Desktop (please complete the following information):

  • OS: Linux 5.0.0-36-generic #39~18.04.1-Ubuntu SMP Tue Nov 12 11:09:50 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Implement a client application as demo

Is your feature request related to a problem? Please describe.
The repository only implements the server of occamy, it is necessary to give a demonstration of Occamy client to its end user.

Describe the solution you'd like
Develop a web application or an Electron-based desktop client.

Improving network traffic in Guacamole protocol

Describe the bug
This CL reverts the network traffic improvements since it breaks the connection sharing feature: ad688ff

This is due to the connection between occamy and removes desktop needs regular connection, and if an owner-user doesn't do anything then the joiner cannot see anything (frame is not refreshed until the owner made some progress). This means a desktop may never be connected to occamy due to the owner's connection may get lost.

We need to do a more detailed investigation of the solution of reducing the network traffic.

Related issues:

404 error on /api/v1/login

Hello,
I tried to run occamy with real rdp server :

  • compiled docker,

  • changed conf.yaml to
    address: 192.168.201.12:5636 (my test machine)

  • run docker with docker run --network="host" -itd occamy:latest /occamy/occamyd -conf=./conf.yaml

  • access to windows machine: http://192.168.201.12:5636/static is ok, I can connect to remote windows machine.

  • modify sources in client/occamy-web to replace 0.0.0.0:5636 with 192.168.201.12:5636

  • npm install && npm run build

  • copy dist/ to my webserver,

  • connect to http://webserver/dist

  • login page is ok, but error 404 when connecting.

Did I missed something ?

curl http://192.168.201.12:5636/api/v1/connect
{"code":401,"message":"cookie token is empty"}

curl http://192.168.201.12:5636/api/v1/login
404 page not found

Redesign protocol instructions

Is your feature request related to a problem? Please describe.
The Guacamole protocol was designed for long connection over TCP. sync and nop instructions intend to pause the connection without breakfast. Nevertheless, during the connection IO, tons of sync and nop meaningless communication are made between client and server, which slows the server performance. Besides, Occamy involves WebSocket as a default option implicitly keep the connection alive. Therefore the only necessary instructions are control and renderer instructions.

Describe the solution you'd like
We would like to propose removing all unnecessary instructions and only kept the control and renderer instructions. This proposal requires large reimplementation of libguac, it is unclear
that this level of refactoring involves how many of cgo calls, which may slow the server due to Go runtime. An investigation is required absolutely.

Fail to build docker

To Reproduce
Steps to reproduce the behavior:

git clone https://github.com/changkun/occamy.git
cd occamy
make build

then return

docker build -t occamy:0.4.0-25-gd220486 -t occamy:latest -f docker/Dockerfile .
make: docker: No such file or directory
make: *** [build] Error

Desktop (please complete the following information):

  • OS: MacOS big sur

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.