Southclaws / storyden

With a fresh new take on traditional bulletin board forum software, Storyden is a modern, secure and extensible platform for building communities.
https://www.storyden.org/
Mozilla Public License 2.0
93 stars 11 forks source link

Use ristretto for in-memory cache #301

Open Southclaws opened 17 hours ago

Southclaws commented 17 hours ago

https://github.com/dgraph-io/ristretto

my janky ass quick hacky local cache is broke af

fatal error: concurrent map iteration and map write

goroutine 70 [running]:
github.com/Southclaws/swirl.(*Limiter).Increment(0xc0012e8450, {0x4244100, 0xc000fcdb00}, {0xc000e7e021, 0x3}, 0x1)
    C:/Users/southclaws/go/pkg/mod/github.com/!southclaws/swirl@v1.0.1/swirl.go:77 +0x8b2
github.com/Southclaws/storyden/internal/infrastructure/rate.(*swirlLimiter).Increment(0xc00115a318, {0x4244100, 0xc000fcdb00}, {0xc000e7e021, 0x3}, 0x1)
    D:/Work/storyden/internal/infrastructure/rate/limiter.go:28 +0xb8
github.com/Southclaws/storyden/app/transports/http/middleware/limiter.(*Middleware).WithRateLimit.func1({0x4240430, 0xc00506f530}, 0xc001e30dc0)
    D:/Work/storyden/app/transports/http/middleware/limiter/limiter.go:55 +0x1e9
net/http.HandlerFunc.ServeHTTP(0xc0012b55a0, {0x4240430, 0xc00506f530}, 0xc001e30dc0)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
github.com/Southclaws/storyden/app/transports/http/middleware/session_cookie.(*Jar).WithAuth.func1({0x4240430, 0xc00506f530}, 0xc001e30c80)
    D:/Work/storyden/app/transports/http/middleware/session_cookie/cookie.go:128 +0x9b
net/http.HandlerFunc.ServeHTTP(0xc0012b55c0, {0x4240430, 0xc00506f530}, 0xc001e30c80)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
github.com/Southclaws/storyden/app/transports/http/middleware/useragent.UserAgentContext.func1({0x4240430, 0xc00506f530}, 0xc001e30c80)
    D:/Work/storyden/app/transports/http/middleware/useragent/ua.go:24 +0x182
net/http.HandlerFunc.ServeHTTP(0xc0012b31b8, {0x4240430, 0xc00506f530}, 0xc001e30b40)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
github.com/Southclaws/storyden/app/transports/http/middleware/reqlog.WithLogger.func1.1({0x423eaa0, 0xc000028d20}, 0xc001e30b40)
    D:/Work/storyden/app/transports/http/middleware/reqlog/requestlog.go:67 +0x3e9
net/http.HandlerFunc.ServeHTTP(0xc0012b55e0, {0x423eaa0, 0xc000028d20}, 0xc001e30b40)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
github.com/rs/cors.(*Cors).Handler.func1({0x423eaa0, 0xc000028d20}, 0xc001e30b40)
    C:/Users/southclaws/go/pkg/mod/github.com/rs/cors@v1.11.1/cors.go:289 +0x2fd
net/http.HandlerFunc.ServeHTTP(0xc0001214e0, {0x423eaa0, 0xc000028d20}, 0xc001e30b40)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
github.com/Southclaws/storyden/app/transports/http/middleware/origin.WithCORS.func1.1({0x423eaa0, 0xc000028d20}, 0xc001e30a00)
    D:/Work/storyden/app/transports/http/middleware/origin/cors.go:69 +0x402
net/http.HandlerFunc.ServeHTTP(0xc001125bc0, {0x423eaa0, 0xc000028d20}, 0xc001e30a00)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
net/http.(*ServeMux).ServeHTTP(0xc000029260, {0x423eaa0, 0xc000028d20}, 0xc001e30a00)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2747 +0x3c2
net/http.serverHandler.ServeHTTP({0xc000dc12c0}, {0x423eaa0, 0xc000028d20}, 0xc001e30a00)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:3210 +0x257
net/http.(*conn).serve(0xc0010c2480, {0x4244138, 0xc000d58140})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2092 +0x1ab5
created by net/http.(*Server).Serve in goroutine 356
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:3360 +0xa9a

goroutine 1 [chan receive, 3 minutes]:
main.Start({0x42442f8, 0xc000da0fc0})
    D:/Work/storyden/cmd/backend/main.go:50 +0x56a
main.main()
    D:/Work/storyden/cmd/backend/main.go:68 +0x16c

goroutine 50 [select]:
go.opencensus.io/stats/view.(*worker).start(0xc000a00280)
    C:/Users/southclaws/go/pkg/mod/go.opencensus.io@v0.24.0/stats/view/worker.go:292 +0x126
created by go.opencensus.io/stats/view.init.0 in goroutine 1
    C:/Users/southclaws/go/pkg/mod/go.opencensus.io@v0.24.0/stats/view/worker.go:34 +0xc5

goroutine 66 [syscall, 3 minutes]:
os/signal.signal_recv()
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/runtime/sigqueue.go:152 +0x29
os/signal.loop()
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/os/signal/signal_unix.go:23 +0x17
created by os/signal.Notify.func1.1 in goroutine 1
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/os/signal/signal.go:151 +0x26

goroutine 67 [select, 3 minutes]:
os/signal.NotifyContext.func1()
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/os/signal/signal.go:288 +0xa7
created by os/signal.NotifyContext in goroutine 1
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/os/signal/signal.go:287 +0x2ed

goroutine 68 [select, 3 minutes]:
database/sql.(*DB).connectionOpener(0xc000c76750, {0x4244138, 0xc000fdb950})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/database/sql/sql.go:1253 +0xbe
created by database/sql.OpenDB in goroutine 1
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/database/sql/sql.go:833 +0x305

goroutine 69 [select, 3 minutes]:
database/sql.(*DB).connectionOpener(0xc000c76820, {0x4244138, 0xc000fdb9a0})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/database/sql/sql.go:1253 +0xbe
created by database/sql.OpenDB in goroutine 1
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/database/sql/sql.go:833 +0x305

goroutine 72 [runnable]:
net/http.readRequest(0xc000c87440)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/request.go:1092 +0xd6
net/http.(*conn).readRequest(0xc0010c25a0, {0x4244138, 0xc00017e6e0})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:1048 +0x516
net/http.(*conn).serve(0xc0010c25a0, {0x4244138, 0xc00017e6e0})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2017 +0xdd4
created by net/http.(*Server).Serve in goroutine 356
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:3360 +0xa9a

goroutine 71 [runnable]:
context.WithValue({0x42441e0, 0x5e51000}, {0x381b000, 0x4221d00}, {0x3ec5720, 0xc0007c80a0})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/context/context.go:723 +0x95
github.com/oapi-codegen/echo-middleware.ValidateRequestFromContext({0x426d000, 0xc0007c80a0}, {0x42337a0, 0xc0011dfad0}, 0xc000e88660)
    C:/Users/southclaws/go/pkg/mod/github.com/oapi-codegen/echo-middleware@v1.0.2/oapi_validate.go:139 +0x62a
github.com/oapi-codegen/echo-middleware.OapiRequestValidatorWithOptions.func1.1({0x426d000, 0xc0007c80a0})
    C:/Users/southclaws/go/pkg/mod/github.com/oapi-codegen/echo-middleware@v1.0.2/oapi_validate.go:98 +0xe5
github.com/Southclaws/storyden/app/transports/http/bindings.NewWebAuthn.func1.1({0x426d000, 0xc0007c80a0})
    D:/Work/storyden/app/transports/http/bindings/webauthn.go:66 +0x30c
github.com/labstack/echo/v4.(*Echo).ServeHTTP(0xc0011f2008, {0x4240430, 0xc0038a43a8}, 0xc0038817c0)
    C:/Users/southclaws/go/pkg/mod/github.com/labstack/echo/v4@v4.12.0/echo.go:674 +0x295
github.com/Southclaws/storyden/app/transports/http/middleware/limiter.WithRequestSizeLimiter.func1.1({0x4240430, 0xc0038a43a8}, 0xc0038817c0)
    D:/Work/storyden/app/transports/http/middleware/limiter/limiter.go:101 +0xce
net/http.HandlerFunc.ServeHTTP(0xc0012b5580, {0x4240430, 0xc0038a43a8}, 0xc0038817c0)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
github.com/Southclaws/storyden/app/transports/http/middleware/limiter.(*Middleware).WithRateLimit.func1({0x4240430, 0xc0038a43a8}, 0xc0038817c0)
    D:/Work/storyden/app/transports/http/middleware/limiter/limiter.go:75 +0x47a
net/http.HandlerFunc.ServeHTTP(0xc0012b55a0, {0x4240430, 0xc0038a43a8}, 0xc0038817c0)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
github.com/Southclaws/storyden/app/transports/http/middleware/session_cookie.(*Jar).WithAuth.func1({0x4240430, 0xc0038a43a8}, 0xc003881680)
    D:/Work/storyden/app/transports/http/middleware/session_cookie/cookie.go:128 +0x9b
net/http.HandlerFunc.ServeHTTP(0xc0012b55c0, {0x4240430, 0xc0038a43a8}, 0xc003881680)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
github.com/Southclaws/storyden/app/transports/http/middleware/useragent.UserAgentContext.func1({0x4240430, 0xc0038a43a8}, 0xc003881680)
    D:/Work/storyden/app/transports/http/middleware/useragent/ua.go:24 +0x182
net/http.HandlerFunc.ServeHTTP(0xc0012b31b8, {0x4240430, 0xc0038a43a8}, 0xc003881540)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
github.com/Southclaws/storyden/app/transports/http/middleware/reqlog.WithLogger.func1.1({0x423eaa0, 0xc0039f62a0}, 0xc003881540)
    D:/Work/storyden/app/transports/http/middleware/reqlog/requestlog.go:67 +0x3e9
net/http.HandlerFunc.ServeHTTP(0xc0012b55e0, {0x423eaa0, 0xc0039f62a0}, 0xc003881540)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
github.com/rs/cors.(*Cors).Handler.func1({0x423eaa0, 0xc0039f62a0}, 0xc003881540)
    C:/Users/southclaws/go/pkg/mod/github.com/rs/cors@v1.11.1/cors.go:289 +0x2fd
net/http.HandlerFunc.ServeHTTP(0xc00392eac0, {0x423eaa0, 0xc0039f62a0}, 0xc003881540)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
github.com/Southclaws/storyden/app/transports/http/middleware/origin.WithCORS.func1.1({0x423eaa0, 0xc0039f62a0}, 0xc003881400)
    D:/Work/storyden/app/transports/http/middleware/origin/cors.go:69 +0x402
net/http.HandlerFunc.ServeHTTP(0xc001125bc0, {0x423eaa0, 0xc0039f62a0}, 0xc003881400)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
net/http.(*ServeMux).ServeHTTP(0xc000029260, {0x423eaa0, 0xc0039f62a0}, 0xc003881400)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2747 +0x3c2
net/http.serverHandler.ServeHTTP({0xc000dc12c0}, {0x423eaa0, 0xc0039f62a0}, 0xc003881400)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:3210 +0x257
net/http.(*conn).serve(0xc0010c2510, {0x4244138, 0xc00017e690})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2092 +0x1ab5
created by net/http.(*Server).Serve in goroutine 356
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:3360 +0xa9a

goroutine 8223 [IO wait]:
internal/poll.runtime_pollWait(0x1cff5b51af0, 0x72)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/runtime/netpoll.go:351 +0x3c
internal/poll.(*pollDesc).wait(0xc00247e930, 0x72, 0x0)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_poll_runtime.go:84 +0x7a
internal/poll.execIO(0xc00247e7a0, 0x407f890)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_windows.go:177 +0x2bb
internal/poll.(*FD).Read(0xc00247e788, {0xc0011d20d1, 0x1, 0x1})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_windows.go:438 +0x4b8
net.(*netFD).Read(0xc00247e788, {0xc0011d20d1, 0x1, 0x1})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/fd_posix.go:55 +0x73
net.(*conn).Read(0xc003e0d3e0, {0xc0011d20d1, 0x1, 0x1})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/net.go:189 +0xa5
net/http.(*connReader).backgroundRead(0xc0011d20c0)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:690 +0x7a
created by net/http.(*connReader).startBackgroundRead in goroutine 71
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:686 +0x185

goroutine 335 [select, 3 minutes]:
github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe.func1(0xc00079f4f0, 0xc000c106e0)
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:198 +0x109
created by github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe in goroutine 82
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:197 +0x618

goroutine 336 [select, 3 minutes]:
github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe.func1()
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:62 +0x125
created by github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe in goroutine 82
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:60 +0x347

goroutine 337 [chan receive, 3 minutes]:
github.com/Southclaws/storyden/app/services/asset/analyse_job.runAnalyseConsumer.func1.1()
    D:/Work/storyden/app/services/asset/analyse_job/job.go:29 +0x85
created by github.com/Southclaws/storyden/app/services/asset/analyse_job.runAnalyseConsumer.func1 in goroutine 82
    D:/Work/storyden/app/services/asset/analyse_job/job.go:28 +0x20d

goroutine 29 [runnable]:
go.uber.org/zap/zapcore.(*jsonEncoder).clone(0xc001186300)
    C:/Users/southclaws/go/pkg/mod/go.uber.org/zap@v1.27.0/zapcore/json_encoder.go:357 +0xa2
go.uber.org/zap/zapcore.(*jsonEncoder).Clone(0xc001186300)
    C:/Users/southclaws/go/pkg/mod/go.uber.org/zap@v1.27.0/zapcore/json_encoder.go:347 +0x27
go.uber.org/zap/zapcore.consoleEncoder.Clone({0xc001186300})
    C:/Users/southclaws/go/pkg/mod/go.uber.org/zap@v1.27.0/zapcore/console_encoder.go:67 +0x27
go.uber.org/zap/zapcore.(*ioCore).clone(0xc001195200)
    C:/Users/southclaws/go/pkg/mod/go.uber.org/zap@v1.27.0/zapcore/core.go:119 +0x3a
go.uber.org/zap/zapcore.(*ioCore).With(0xc001195200, {0xc0014e3200, 0x6, 0x6})
    C:/Users/southclaws/go/pkg/mod/go.uber.org/zap@v1.27.0/zapcore/core.go:82 +0x45
go.uber.org/zap.(*Logger).With(0xc000a01b80, {0xc0014e3200, 0x6, 0x6})
    C:/Users/southclaws/go/pkg/mod/go.uber.org/zap@v1.27.0/logger.go:185 +0x87
github.com/Southclaws/storyden/app/transports/http/middleware/reqlog.WithLogger.func1.1.1()
    D:/Work/storyden/app/transports/http/middleware/reqlog/requestlog.go:36 +0x805
github.com/Southclaws/storyden/app/transports/http/middleware/reqlog.WithLogger.func1.1({0x423eaa0, 0xc000d3ca80}, 0xc000f23b80)
    D:/Work/storyden/app/transports/http/middleware/reqlog/requestlog.go:68 +0x3ee
net/http.HandlerFunc.ServeHTTP(0xc0012b55e0, {0x423eaa0, 0xc000d3ca80}, 0xc000f23b80)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
github.com/rs/cors.(*Cors).Handler.func1({0x423eaa0, 0xc000d3ca80}, 0xc000f23b80)
    C:/Users/southclaws/go/pkg/mod/github.com/rs/cors@v1.11.1/cors.go:289 +0x2fd
net/http.HandlerFunc.ServeHTTP(0xc000c816c0, {0x423eaa0, 0xc000d3ca80}, 0xc000f23b80)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
github.com/Southclaws/storyden/app/transports/http/middleware/origin.WithCORS.func1.1({0x423eaa0, 0xc000d3ca80}, 0xc000f23a40)
    D:/Work/storyden/app/transports/http/middleware/origin/cors.go:69 +0x402
net/http.HandlerFunc.ServeHTTP(0xc001125bc0, {0x423eaa0, 0xc000d3ca80}, 0xc000f23a40)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
net/http.(*ServeMux).ServeHTTP(0xc000029260, {0x423eaa0, 0xc000d3ca80}, 0xc000f23a40)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2747 +0x3c2
net/http.serverHandler.ServeHTTP({0xc000dc12c0}, {0x423eaa0, 0xc000d3ca80}, 0xc000f23a40)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:3210 +0x257
net/http.(*conn).serve(0xc001300090, {0x4244138, 0xc0009e2be0})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2092 +0x1ab5
created by net/http.(*Server).Serve in goroutine 356
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:3360 +0xa9a

goroutine 338 [select, 3 minutes]:
github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe.func1(0xc00079f720, 0xc000c106e0)
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:198 +0x109
created by github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe in goroutine 82
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:197 +0x618

goroutine 339 [select, 3 minutes]:
github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe.func1()
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:62 +0x125
created by github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe in goroutine 82
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:60 +0x347

goroutine 340 [chan receive, 3 minutes]:
github.com/Southclaws/storyden/app/services/link/scrape_job.runScrapeConsumer.func1.1()
    D:/Work/storyden/app/services/link/scrape_job/job.go:31 +0x85
created by github.com/Southclaws/storyden/app/services/link/scrape_job.runScrapeConsumer.func1 in goroutine 82
    D:/Work/storyden/app/services/link/scrape_job/job.go:30 +0x209

goroutine 341 [select, 3 minutes]:
github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe.func1(0xc00079f810, 0xc000c106e0)
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:198 +0x109
created by github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe in goroutine 82
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:197 +0x618

goroutine 343 [chan receive, 3 minutes]:
github.com/Southclaws/storyden/app/services/notification/notify_job.runNotifyConsumer.func1.1()
    D:/Work/storyden/app/services/notification/notify_job/job.go:30 +0x74
created by github.com/Southclaws/storyden/app/services/notification/notify_job.runNotifyConsumer.func1 in goroutine 82
    D:/Work/storyden/app/services/notification/notify_job/job.go:29 +0x209

goroutine 342 [select, 3 minutes]:
github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe.func1()
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:62 +0x125
created by github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe in goroutine 82
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:60 +0x347

goroutine 344 [select, 3 minutes]:
github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe.func1(0xc00079f900, 0xc000c106e0)
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:198 +0x109
created by github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe in goroutine 82
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:197 +0x618

goroutine 345 [select, 3 minutes]:
github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe.func1()
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:62 +0x125
created by github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe in goroutine 82
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:60 +0x347

goroutine 346 [chan receive, 3 minutes]:
github.com/Southclaws/storyden/app/services/mention/mention_job.runMentionConsumer.func1.1()
    D:/Work/storyden/app/services/mention/mention_job/job.go:30 +0x7d
created by github.com/Southclaws/storyden/app/services/mention/mention_job.runMentionConsumer.func1 in goroutine 82
    D:/Work/storyden/app/services/mention/mention_job/job.go:29 +0x209

goroutine 347 [select, 3 minutes]:
github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe.func1(0xc00079f9a0, 0xc000c106e0)
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:198 +0x109
created by github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe in goroutine 82
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:197 +0x618

goroutine 348 [select, 3 minutes]:
github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe.func1()
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:62 +0x125
created by github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe in goroutine 82
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:60 +0x347

goroutine 349 [select, 3 minutes]:
github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe.func1(0xc00079f9f0, 0xc000c106e0)
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:198 +0x109
created by github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe in goroutine 82
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:197 +0x618

goroutine 350 [select, 3 minutes]:
github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe.func1()
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:62 +0x125
created by github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe in goroutine 82
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:60 +0x347

goroutine 351 [chan receive, 3 minutes]:
github.com/Southclaws/storyden/app/services/semdex/index_job.runIndexConsumer.func1.1()
    D:/Work/storyden/app/services/semdex/index_job/job.go:37 +0x7a
created by github.com/Southclaws/storyden/app/services/semdex/index_job.runIndexConsumer.func1 in goroutine 82
    D:/Work/storyden/app/services/semdex/index_job/job.go:36 +0x2db

goroutine 352 [chan receive, 3 minutes]:
github.com/Southclaws/storyden/app/services/semdex/index_job.runIndexConsumer.func1.2()
    D:/Work/storyden/app/services/semdex/index_job/job.go:49 +0x7a
created by github.com/Southclaws/storyden/app/services/semdex/index_job.runIndexConsumer.func1 in goroutine 82
    D:/Work/storyden/app/services/semdex/index_job/job.go:48 +0x3db

goroutine 353 [select, 3 minutes]:
github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe.func1(0xc00079fa90, 0xc000c106e0)
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:198 +0x109
created by github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe in goroutine 82
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:197 +0x618

goroutine 354 [select, 3 minutes]:
github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe.func1()
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:62 +0x125
created by github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe in goroutine 82
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:60 +0x347

goroutine 355 [chan receive, 3 minutes]:
github.com/Southclaws/storyden/app/services/event/event_job.runEventUpdateConsumer.func1.1()
    D:/Work/storyden/app/services/event/event_job/job.go:29 +0x36
created by github.com/Southclaws/storyden/app/services/event/event_job.runEventUpdateConsumer.func1 in goroutine 82
    D:/Work/storyden/app/services/event/event_job/job.go:28 +0x14f

goroutine 356 [IO wait]:
internal/poll.runtime_pollWait(0x1cff5b51f50, 0x72)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/runtime/netpoll.go:351 +0x3c
internal/poll.(*pollDesc).wait(0xc000c501b0, 0x72, 0x0)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_poll_runtime.go:84 +0x7a
internal/poll.execIO(0xc000c50020, 0xc0016e3130)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_windows.go:177 +0x2bb
internal/poll.(*FD).acceptOne(0xc000c50008, 0x5fc, {0xc0010b4c30, 0x2, 0x2}, 0xc000c50020)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_windows.go:946 +0x10d
internal/poll.(*FD).Accept(0xc000c50008, 0xc0016e35f8)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_windows.go:980 +0x445
net.(*netFD).accept(0xc000c50008)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/fd_windows.go:182 +0xcf
net.(*TCPListener).accept(0xc000f83c40)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/tcpsock_posix.go:159 +0x65
net.(*TCPListener).Accept(0xc000f83c40)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/tcpsock.go:372 +0x65
net/http.(*Server).Serve(0xc000dc12c0, {0x423f080, 0xc000f83c40})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:3330 +0x50b
net/http.(*Server).ListenAndServe(0xc000dc12c0)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:3259 +0x17c
github.com/Southclaws/storyden/internal/infrastructure/httpserver.NewServer.func1.2()
    D:/Work/storyden/internal/infrastructure/httpserver/server.go:38 +0x653
created by github.com/Southclaws/storyden/internal/infrastructure/httpserver.NewServer.func1 in goroutine 82
    D:/Work/storyden/internal/infrastructure/httpserver/server.go:25 +0x190

goroutine 44 [runnable]:
internal/poll.(*FD).incref(0xc002378008)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_mutex.go:201 +0x7f
internal/poll.setDeadlineImpl(0xc002378008, {0x0, 0x0, 0x0}, 0x72)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_poll_runtime.go:154 +0xc5
internal/poll.(*FD).SetReadDeadline(0xc002378008, {0x0, 0x0, 0x0})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_poll_runtime.go:138 +0x46
net.(*netFD).SetReadDeadline(0xc002378008, {0x0, 0x0, 0x0})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/fd_posix.go:142 +0x48
net.(*conn).SetReadDeadline(0xc004280000, {0x0, 0x0, 0x0})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/net.go:256 +0x72
net/http.(*conn).serve(0xc000c23680, {0x4244138, 0xc0009e2c80})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2131 +0x1dd8
created by net/http.(*Server).Serve in goroutine 356
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:3360 +0xa9a

goroutine 365 [select, 3 minutes]:
github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe.func1(0xc0011be0a0, 0xc000c106e0)
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:198 +0x109
created by github.com/ThreeDotsLabs/watermill/pubsub/gochannel.(*GoChannel).Subscribe in goroutine 82
    C:/Users/southclaws/go/pkg/mod/github.com/!three!dots!labs/watermill@v1.4.1/pubsub/gochannel/pubsub.go:197 +0x618

goroutine 366 [select, 3 minutes]:
github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe.func1()
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:62 +0x125
created by github.com/Southclaws/storyden/internal/infrastructure/pubsub/queue.(*watermillQueue[...]).Subscribe in goroutine 82
    D:/Work/storyden/internal/infrastructure/pubsub/queue/factory.go:60 +0x347

goroutine 367 [chan receive, 3 minutes]:
github.com/Southclaws/storyden/app/services/comms/mailqueue.Build.func1.1.1()
    D:/Work/storyden/app/services/comms/mailqueue/queuer.go:62 +0x85
created by github.com/Southclaws/storyden/app/services/comms/mailqueue.Build.func1.1 in goroutine 82
    D:/Work/storyden/app/services/comms/mailqueue/queuer.go:61 +0x1f1

goroutine 370 [runnable]:
github.com/rs/cors.(*Cors).handleActualRequest(0xc001f50ea0, {0x423eaa0, 0xc0031a20e0}, 0xc0022d0280)
    C:/Users/southclaws/go/pkg/mod/github.com/rs/cors@v1.11.1/cors.go:441 +0x66a
github.com/rs/cors.(*Cors).Handler.func1({0x423eaa0, 0xc0031a20e0}, 0xc0022d0280)
    C:/Users/southclaws/go/pkg/mod/github.com/rs/cors@v1.11.1/cors.go:288 +0x2d3
net/http.HandlerFunc.ServeHTTP(0xc000c81720, {0x423eaa0, 0xc0031a20e0}, 0xc0022d0280)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
github.com/Southclaws/storyden/app/transports/http/middleware/origin.WithCORS.func1.1({0x423eaa0, 0xc0031a20e0}, 0xc003e03b80)
    D:/Work/storyden/app/transports/http/middleware/origin/cors.go:69 +0x402
net/http.HandlerFunc.ServeHTTP(0xc001125bc0, {0x423eaa0, 0xc0031a20e0}, 0xc003e03b80)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2220 +0x33
net/http.(*ServeMux).ServeHTTP(0xc000029260, {0x423eaa0, 0xc0031a20e0}, 0xc003e03b80)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2747 +0x3c2
net/http.serverHandler.ServeHTTP({0xc000dc12c0}, {0x423eaa0, 0xc0031a20e0}, 0xc003e03b80)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:3210 +0x257
net/http.(*conn).serve(0xc000f6e000, {0x4244138, 0xc0009e2c30})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2092 +0x1ab5
created by net/http.(*Server).Serve in goroutine 356
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:3360 +0xa9a

goroutine 8602 [IO wait]:
internal/poll.runtime_pollWait(0x1cff5b51d20, 0x72)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/runtime/netpoll.go:351 +0x3c
internal/poll.(*pollDesc).wait(0xc0011e21b0, 0x72, 0x0)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_poll_runtime.go:84 +0x7a
internal/poll.execIO(0xc0011e2020, 0x407f890)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_windows.go:177 +0x2bb
internal/poll.(*FD).Read(0xc0011e2008, {0xc001194731, 0x1, 0x1})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_windows.go:438 +0x4b8
net.(*netFD).Read(0xc0011e2008, {0xc001194731, 0x1, 0x1})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/fd_posix.go:55 +0x73
net.(*conn).Read(0xc00431a000, {0xc001194731, 0x1, 0x1})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/net.go:189 +0xa5
net/http.(*connReader).backgroundRead(0xc001194720)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:690 +0x7a
created by net/http.(*connReader).startBackgroundRead in goroutine 29
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:686 +0x185

goroutine 8439 [IO wait]:
internal/poll.runtime_pollWait(0x1cff5b51c08, 0x72)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/runtime/netpoll.go:351 +0x3c
internal/poll.(*pollDesc).wait(0xc001478930, 0x72, 0x0)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_poll_runtime.go:84 +0x7a
internal/poll.execIO(0xc0014787a0, 0x407f890)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_windows.go:177 +0x2bb
internal/poll.(*FD).Read(0xc001478788, {0xc0011947c1, 0x1, 0x1})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_windows.go:438 +0x4b8
net.(*netFD).Read(0xc001478788, {0xc0011947c1, 0x1, 0x1})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/fd_posix.go:55 +0x73
net.(*conn).Read(0xc001200018, {0xc0011947c1, 0x1, 0x1})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/net.go:189 +0xa5
net/http.(*connReader).backgroundRead(0xc0011947b0)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:690 +0x7a
created by net/http.(*connReader).startBackgroundRead in goroutine 370
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:686 +0x185

goroutine 8506 [IO wait]:
internal/poll.runtime_pollWait(0x1cff5b51e38, 0x72)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/runtime/netpoll.go:351 +0x3c
internal/poll.(*pollDesc).wait(0xc001259d30, 0x72, 0x0)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_poll_runtime.go:84 +0x7a
internal/poll.execIO(0xc001259ba0, 0x407f890)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_windows.go:177 +0x2bb
internal/poll.(*FD).Read(0xc001259b88, {0xc0011b4071, 0x1, 0x1})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/internal/poll/fd_windows.go:438 +0x4b8
net.(*netFD).Read(0xc001259b88, {0xc0011b4071, 0x1, 0x1})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/fd_posix.go:55 +0x73
net.(*conn).Read(0xc003e0d3d8, {0xc0011b4071, 0x1, 0x1})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/net.go:189 +0xa5
net/http.(*connReader).backgroundRead(0xc0011b4060)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:690 +0x7a
created by net/http.(*connReader).startBackgroundRead in goroutine 70
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:686 +0x185

goroutine 7336 [runnable]:
net/http.(*conn).setState(0xc003c74090, {0x424e220, 0xc007c1a000}, 0x4, 0x1)
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:1873 +0x199
net/http.(*conn).serve.func1()
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:1960 +0x3b8
net/http.(*conn).serve(0xc003c74090, {0x4244138, 0xc003802050})
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:2128 +0x1d9a
created by net/http.(*Server).Serve in goroutine 356
    C:/Users/southclaws/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.windows-amd64/src/net/http/server.go:3360 +0xa9a
Process 38868 has exited with status 2
Detaching