diff options
author | Elias Fleckenstein <eliasfleckenstein@web.de> | 2022-06-09 01:01:15 +0200 |
---|---|---|
committer | Elias Fleckenstein <eliasfleckenstein@web.de> | 2022-06-09 01:01:15 +0200 |
commit | ca05a63f2d249620272af55885d2799779857ce9 (patch) | |
tree | acdc3c5092c9d6f7258bac709b47bebc008b58f0 | |
parent | 1a8a4ac3dc8b9c3167e18192269d8609f6e7799e (diff) | |
download | hydra-dragonfire-ca05a63f2d249620272af55885d2799779857ce9.tar.xz |
Fix deadlock on auth fail
-rw-r--r-- | client.go | 27 | ||||
-rw-r--r-- | comp_auth.go | 2 | ||||
-rw-r--r-- | comp_pkts.go | 2 | ||||
-rw-r--r-- | map.go | 2 | ||||
-rw-r--r-- | path.go | 2 |
5 files changed, 18 insertions, 17 deletions
@@ -2,8 +2,8 @@ package main import ( "errors" - "github.com/dragonfireclient/mt" "github.com/dragonfireclient/hydra-dragonfire/convert" + "github.com/dragonfireclient/mt" "github.com/yuin/gopher-lua" "net" "sync" @@ -25,12 +25,13 @@ type Component interface { } type Client struct { - mu sync.Mutex address string state clientState conn mt.Peer + muConn sync.Mutex queue chan Event components map[string]Component + muComp sync.Mutex table *lua.LTable userdata *lua.LUserData } @@ -80,8 +81,8 @@ func getClients(l *lua.LState) []*Client { } func (client *Client) closeConn() { - client.mu.Lock() - defer client.mu.Unlock() + client.muConn.Lock() + defer client.muConn.Unlock() if client.state == csConnected { client.conn.Close() @@ -165,11 +166,11 @@ func l_client_connect(l *lua.LState) int { pkt, err := client.conn.Recv() if err == nil { - client.mu.Lock() + client.muComp.Lock() for _, comp := range client.components { comp.process(&pkt) } - client.mu.Unlock() + client.muComp.Unlock() } else if errors.Is(err, net.ErrClosed) { client.queue <- EventDisconnect{client: client} return @@ -179,11 +180,11 @@ func l_client_connect(l *lua.LState) int { } }() - client.mu.Lock() + client.muComp.Lock() for _, comp := range client.components { comp.connect() } - client.mu.Unlock() + client.muComp.Unlock() return 0 } @@ -203,8 +204,8 @@ func l_client_enable(l *lua.LState) int { client := getClient(l) n := l.GetTop() - client.mu.Lock() - defer client.mu.Unlock() + client.muComp.Lock() + defer client.muComp.Unlock() for i := 2; i <= n; i++ { name := l.CheckString(i) @@ -232,6 +233,9 @@ func l_client_enable(l *lua.LState) int { func l_client_send(l *lua.LState) int { client := getClient(l) + client.muConn.Lock() + defer client.muConn.Unlock() + if client.state != csConnected { panic("not connected") } @@ -239,9 +243,6 @@ func l_client_send(l *lua.LState) int { cmd := convert.ReadCmd(l) doAck := l.ToBool(4) - client.mu.Lock() - defer client.mu.Unlock() - if client.state == csConnected { ack, err := client.conn.SendCmd(cmd) if err != nil && !errors.Is(err, net.ErrClosed) { diff --git a/comp_auth.go b/comp_auth.go index a017cc7..eeccc66 100644 --- a/comp_auth.go +++ b/comp_auth.go @@ -2,8 +2,8 @@ package main import ( "github.com/HimbeerserverDE/srp" - "github.com/dragonfireclient/mt" "github.com/dragonfireclient/hydra-dragonfire/convert" + "github.com/dragonfireclient/mt" "github.com/yuin/gopher-lua" "strings" "time" diff --git a/comp_pkts.go b/comp_pkts.go index f135e6b..7fc7e83 100644 --- a/comp_pkts.go +++ b/comp_pkts.go @@ -1,8 +1,8 @@ package main import ( - "github.com/dragonfireclient/mt" "github.com/dragonfireclient/hydra-dragonfire/convert" + "github.com/dragonfireclient/mt" "github.com/yuin/gopher-lua" "sync" ) @@ -1,8 +1,8 @@ package main import ( - "github.com/dragonfireclient/mt" "github.com/dragonfireclient/hydra-dragonfire/convert" + "github.com/dragonfireclient/mt" "github.com/yuin/gopher-lua" "sync" ) @@ -1,9 +1,9 @@ package main import ( - "github.com/dragonfireclient/mt" "github.com/beefsack/go-astar" "github.com/dragonfireclient/hydra-dragonfire/convert" + "github.com/dragonfireclient/mt" "github.com/yuin/gopher-lua" "math" "sync" |