make GetSessions use the session workers to avoid races

This commit is contained in:
Arceliar 2019-06-29 18:56:26 -05:00
parent d39428735d
commit 40553a6a44

View File

@ -211,16 +211,31 @@ func (c *Core) GetSessions() []Session {
var sessions []Session var sessions []Session
getSessions := func() { getSessions := func() {
for _, sinfo := range c.sessions.sinfos { for _, sinfo := range c.sessions.sinfos {
// TODO? skipped known but timed out sessions? var session Session
session := Session{ workerFunc := func() {
Coords: append([]byte{}, sinfo.coords...), session := Session{
MTU: sinfo.getMTU(), Coords: append([]byte{}, sinfo.coords...),
BytesSent: sinfo.bytesSent, MTU: sinfo.getMTU(),
BytesRecvd: sinfo.bytesRecvd, BytesSent: sinfo.bytesSent,
Uptime: time.Now().Sub(sinfo.timeOpened), BytesRecvd: sinfo.bytesRecvd,
WasMTUFixed: sinfo.wasMTUFixed, Uptime: time.Now().Sub(sinfo.timeOpened),
WasMTUFixed: sinfo.wasMTUFixed,
}
copy(session.PublicKey[:], sinfo.theirPermPub[:])
} }
copy(session.PublicKey[:], sinfo.theirPermPub[:]) var skip bool
func() {
defer func() {
if recover() != nil {
skip = true
}
}()
sinfo.doWorker(workerFunc)
}()
if skip {
continue
}
// TODO? skipped known but timed out sessions?
sessions = append(sessions, session) sessions = append(sessions, session)
} }
} }