5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-12-23 02:55:39 +00:00

Fix con urrent map accesses

This commit is contained in:
Neil Alexander 2023-05-20 18:21:02 +01:00
parent e290e744f4
commit 6e338b6f89
No known key found for this signature in database
GPG Key ID: A02A2019A2BB0944

View File

@ -152,7 +152,12 @@ func (l *links) add(u *url.URL, sintf string, linkType linkType) error {
sintf: sintf,
linkType: linkType,
}
if state, ok := l._links[info]; ok {
var state *link
var ok bool
phony.Block(l, func() {
state, ok = l._links[info]
})
if ok && state != nil {
select {
case state.kick <- struct{}{}:
default:
@ -164,7 +169,7 @@ func (l *links) add(u *url.URL, sintf string, linkType linkType) error {
// in progress (if any), any error details and a context that
// lets the link be cancelled later.
ctx, cancel := context.WithCancel(l.core.ctx)
state := &link{
state = &link{
info: info,
linkProto: strings.ToUpper(u.Scheme),
ctx: ctx,
@ -327,8 +332,12 @@ func (l *links) listen(u *url.URL, sintf string) (*Listener, error) {
_ = conn.Close()
continue
}
state := l._links[info]
if state == nil {
var state *link
var ok bool
phony.Block(l, func() {
state = l._links[info]
})
if !ok || state == nil {
state = &link{
info: info,
}