@@ -114,7 +114,7 @@ const (
114
114
)
115
115
116
116
// max size of buffers before they're discarded (e.g after a big incmoing event)
117
- const MaxIntermediaryBuffersSize = 100000
117
+ const MaxIntermediaryBuffersSize = 10000
118
118
119
119
// GatewayIdentifyRatelimiter is if you need some custom identify ratelimit logic (if you're running shards across processes for example)
120
120
type GatewayIdentifyRatelimiter interface {
@@ -1107,7 +1107,7 @@ func (g *GatewayConnection) handleReadMessage() {
1107
1107
return
1108
1108
}
1109
1109
1110
- if g .decodedBuffer .Cap () > MaxIntermediaryBuffersSize {
1110
+ if g .decodedBuffer .Cap () > MaxIntermediaryBuffersSize && readLen < MaxIntermediaryBuffersSize {
1111
1111
maybeThrowawayBytesBuf (& g .decodedBuffer , MaxIntermediaryBuffersSize )
1112
1112
g .jsonDecoder = gojay .NewDecoder (g .teeReader )
1113
1113
}
@@ -1175,6 +1175,8 @@ func (g *GatewayConnection) handleHello(event *Event) error {
1175
1175
1176
1176
func (g * GatewayConnection ) handleDispatch (e * Event ) error {
1177
1177
1178
+ size := len (e .RawData )
1179
+
1178
1180
// Map event to registered event handlers and pass it along to any registered handlers.
1179
1181
if eh , ok := registeredInterfaceProviders [e .Type ]; ok {
1180
1182
e .Struct = eh .New ()
@@ -1222,7 +1224,7 @@ func (g *GatewayConnection) handleDispatch(e *Event) error {
1222
1224
g .log (LogWarning , "unknown event: Op: %d, Seq: %d, Type: %s, Data: %s" , e .Operation , e .Sequence , e .Type , string (e .RawData ))
1223
1225
}
1224
1226
1225
- if g .secondPassBuf .Cap () > MaxIntermediaryBuffersSize {
1227
+ if g .secondPassBuf .Cap () > MaxIntermediaryBuffersSize && size < MaxIntermediaryBuffersSize {
1226
1228
maybeThrowawayBytesBuf (g .secondPassBuf , MaxIntermediaryBuffersSize )
1227
1229
g .secondPassJsonDecoder = json .NewDecoder (g .secondPassBuf )
1228
1230
}
0 commit comments