mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-28 22:25:07 +03:00
Move mutexes around
This commit is contained in:
parent
e3eadba4b7
commit
27b78b925d
2 changed files with 19 additions and 23 deletions
|
@ -73,18 +73,26 @@ func (c *Conn) Read(b []byte) (int, error) {
|
|||
return 0, errors.New("session was closed")
|
||||
}
|
||||
defer util.PutBytes(p.Payload)
|
||||
if !c.session.nonceIsOK(&p.Nonce) {
|
||||
return 0, errors.New("packet dropped due to invalid nonce")
|
||||
err := func() error {
|
||||
c.session.theirNonceMutex.Lock()
|
||||
defer c.session.theirNonceMutex.Unlock()
|
||||
if !c.session.nonceIsOK(&p.Nonce) {
|
||||
return errors.New("packet dropped due to invalid nonce")
|
||||
}
|
||||
bs, isOK := crypto.BoxOpen(&c.session.sharedSesKey, p.Payload, &p.Nonce)
|
||||
if !isOK {
|
||||
util.PutBytes(bs)
|
||||
return errors.New("packet dropped due to decryption failure")
|
||||
}
|
||||
b = b[:0]
|
||||
b = append(b, bs...)
|
||||
c.session.updateNonce(&p.Nonce)
|
||||
c.session.time = time.Now()
|
||||
return nil
|
||||
}()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
bs, isOK := crypto.BoxOpen(&c.session.sharedSesKey, p.Payload, &p.Nonce)
|
||||
if !isOK {
|
||||
util.PutBytes(bs)
|
||||
return 0, errors.New("packet dropped due to decryption failure")
|
||||
}
|
||||
b = b[:0]
|
||||
b = append(b, bs...)
|
||||
c.session.updateNonce(&p.Nonce)
|
||||
c.session.time = time.Now()
|
||||
atomic.AddUint64(&c.session.bytesRecvd, uint64(len(b)))
|
||||
return len(b), nil
|
||||
case <-c.session.closed:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue