5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-11-29 19:01:50 +00:00

misc other fixes

This commit is contained in:
Arceliar 2019-09-18 18:33:51 -05:00
parent 2dc136f94a
commit 2d64a6380a
3 changed files with 11 additions and 15 deletions

View File

@ -102,11 +102,12 @@ func (c *Conn) search() error {
if sinfo != nil { if sinfo != nil {
// Need to clean up to avoid a session leak // Need to clean up to avoid a session leak
sinfo.cancel.Cancel(nil) sinfo.cancel.Cancel(nil)
sinfo.sessions.removeSession(sinfo)
} }
default: default:
if sinfo != nil { if sinfo != nil {
// Finish initializing the session // Finish initializing the session
sinfo.conn = c sinfo.setConn(nil, c)
} }
c.session = sinfo c.session = sinfo
err = e err = e

View File

@ -416,8 +416,11 @@ func (sinfo *sessionInfo) _updateNonce(theirNonce *crypto.BoxNonce) {
// Called after coord changes, so attemtps to use a session will trigger a new ping and notify the remote end of the coord change. // Called after coord changes, so attemtps to use a session will trigger a new ping and notify the remote end of the coord change.
// Only call this from the router actor. // Only call this from the router actor.
func (ss *sessions) reset() { func (ss *sessions) reset() {
for _, sinfo := range ss.sinfos { for _, _sinfo := range ss.sinfos {
sinfo.reset = true sinfo := _sinfo // So we can safely put it in a closure
sinfo.Act(ss.router, func() {
sinfo.reset = true
})
} }
} }
@ -474,12 +477,6 @@ func (sinfo *sessionInfo) _recvPacket(p *wire_trafficPacket) {
util.PutBytes(bs) util.PutBytes(bs)
return return
} }
if sinfo.conn == nil {
// There's no connection associated with this session for some reason
// TODO: Figure out why this happens sometimes, it shouldn't
util.PutBytes(bs)
return
}
sinfo._updateNonce(&p.Nonce) sinfo._updateNonce(&p.Nonce)
sinfo.bytesRecvd += uint64(len(bs)) sinfo.bytesRecvd += uint64(len(bs))
sinfo.conn.recvMsg(sinfo, bs) sinfo.conn.recvMsg(sinfo, bs)

View File

@ -207,11 +207,12 @@ func (t *tcp) listener(l *TcpListener, listenaddr string) {
} }
// Checks if we already are calling this address // Checks if we already are calling this address
func (t *tcp) isAlreadyCalling(saddr string) bool { func (t *tcp) startCalling(saddr string) bool {
t.mutex.Lock() t.mutex.Lock()
defer t.mutex.Unlock() defer t.mutex.Unlock()
_, isIn := t.calls[saddr] _, isIn := t.calls[saddr]
return isIn t.calls[saddr] = struct{}{}
return !isIn
} }
// Checks if a connection already exists. // Checks if a connection already exists.
@ -225,12 +226,9 @@ func (t *tcp) call(saddr string, options interface{}, sintf string) {
if sintf != "" { if sintf != "" {
callname = fmt.Sprintf("%s/%s", saddr, sintf) callname = fmt.Sprintf("%s/%s", saddr, sintf)
} }
if t.isAlreadyCalling(callname) { if !t.startCalling(callname) {
return return
} }
t.mutex.Lock()
t.calls[callname] = struct{}{}
t.mutex.Unlock()
defer func() { defer func() {
// Block new calls for a little while, to mitigate livelock scenarios // Block new calls for a little while, to mitigate livelock scenarios
time.Sleep(default_timeout) time.Sleep(default_timeout)