Skip to content

Bug: Potential timing issues caused by Go runtime preemptive schedulingΒ #116

@zishang520

Description

@zishang520

Because Go’s runtime (goruntime) uses preemptive scheduling, when multiple goroutines run concurrently, the execution order may not always match the expected logic. See:

go socket._onpacket(packet)

go func(err error) {
if err != nil {
s._onerror(err)
return
}
if s.Connected() {
s.EmitUntyped(slices.TryGetAny[string](event, 0), slices.Slice(event, 1)...)
} else {
socket_log.Debug("ignore packet received after disconnection")
}
}(err)

go func() {
if client.conn.ReadyState() != "open" {
namespace_log.Debug("next called after client was closed - ignoring socket")
socket._cleanup()
return
}
if err != nil {
namespace_log.Debug("middleware error, sending CONNECT_ERROR packet to the client")
socket._cleanup()
if client.conn.Protocol() == 3 {
if e := err.Data(); e != nil {
socket._error(e)
return
}
socket._error(err.Error())
return
} else {
socket._error(map[string]any{
"message": err.Error(),
"data": err.Data(),
})
return
}
}
n._doConnect(socket, fn)
}()

go s._onClose("ping timeout", nil)

and more goruntime logic...

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions