Removed debugging locks
This commit is contained in:
		
							parent
							
								
									a0f54cbe5a
								
							
						
					
					
						commit
						9c5083bd19
					
				
							
								
								
									
										90
									
								
								device.go
									
									
									
									
									
								
							
							
						
						
									
										90
									
								
								device.go
									
									
									
									
									
								
							@ -1,7 +1,6 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/sasha-s/go-deadlock"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"sync/atomic"
 | 
			
		||||
@ -16,31 +15,31 @@ type Device struct {
 | 
			
		||||
	// synchronized resources (locks acquired in order)
 | 
			
		||||
 | 
			
		||||
	state struct {
 | 
			
		||||
		mutex    deadlock.Mutex
 | 
			
		||||
		mutex    sync.Mutex
 | 
			
		||||
		changing AtomicBool
 | 
			
		||||
		current  bool
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	net struct {
 | 
			
		||||
		mutex  deadlock.RWMutex
 | 
			
		||||
		mutex  sync.RWMutex
 | 
			
		||||
		bind   Bind   // bind interface
 | 
			
		||||
		port   uint16 // listening port
 | 
			
		||||
		fwmark uint32 // mark value (0 = disabled)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	noise struct {
 | 
			
		||||
		mutex      deadlock.RWMutex
 | 
			
		||||
		mutex      sync.RWMutex
 | 
			
		||||
		privateKey NoisePrivateKey
 | 
			
		||||
		publicKey  NoisePublicKey
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	routing struct {
 | 
			
		||||
		mutex deadlock.RWMutex
 | 
			
		||||
		mutex sync.RWMutex
 | 
			
		||||
		table RoutingTable
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	peers struct {
 | 
			
		||||
		mutex  deadlock.RWMutex
 | 
			
		||||
		mutex  sync.RWMutex
 | 
			
		||||
		keyMap map[NoisePublicKey]*Peer
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -101,53 +100,46 @@ func deviceUpdateState(device *Device) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	func() {
 | 
			
		||||
	// compare to current state of device
 | 
			
		||||
 | 
			
		||||
		// compare to current state of device
 | 
			
		||||
	device.state.mutex.Lock()
 | 
			
		||||
 | 
			
		||||
		device.state.mutex.Lock()
 | 
			
		||||
		defer device.state.mutex.Unlock()
 | 
			
		||||
	newIsUp := device.isUp.Get()
 | 
			
		||||
 | 
			
		||||
		newIsUp := device.isUp.Get()
 | 
			
		||||
 | 
			
		||||
		if newIsUp == device.state.current {
 | 
			
		||||
			device.state.changing.Set(false)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// change state of device
 | 
			
		||||
 | 
			
		||||
		switch newIsUp {
 | 
			
		||||
		case true:
 | 
			
		||||
			if err := device.BindUpdate(); err != nil {
 | 
			
		||||
				device.isUp.Set(false)
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			device.peers.mutex.Lock()
 | 
			
		||||
			defer device.peers.mutex.Unlock()
 | 
			
		||||
 | 
			
		||||
			for _, peer := range device.peers.keyMap {
 | 
			
		||||
				peer.Start()
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		case false:
 | 
			
		||||
			device.BindClose()
 | 
			
		||||
 | 
			
		||||
			device.peers.mutex.Lock()
 | 
			
		||||
			defer device.peers.mutex.Unlock()
 | 
			
		||||
 | 
			
		||||
			for _, peer := range device.peers.keyMap {
 | 
			
		||||
				println("stopping peer")
 | 
			
		||||
				peer.Stop()
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// update state variables
 | 
			
		||||
 | 
			
		||||
		device.state.current = newIsUp
 | 
			
		||||
	if newIsUp == device.state.current {
 | 
			
		||||
		device.state.changing.Set(false)
 | 
			
		||||
	}()
 | 
			
		||||
		device.state.mutex.Unlock()
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// change state of device
 | 
			
		||||
 | 
			
		||||
	switch newIsUp {
 | 
			
		||||
	case true:
 | 
			
		||||
		if err := device.BindUpdate(); err != nil {
 | 
			
		||||
			device.isUp.Set(false)
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		device.peers.mutex.Lock()
 | 
			
		||||
		for _, peer := range device.peers.keyMap {
 | 
			
		||||
			peer.Start()
 | 
			
		||||
		}
 | 
			
		||||
		device.peers.mutex.Unlock()
 | 
			
		||||
 | 
			
		||||
	case false:
 | 
			
		||||
		device.BindClose()
 | 
			
		||||
		device.peers.mutex.Lock()
 | 
			
		||||
		for _, peer := range device.peers.keyMap {
 | 
			
		||||
			peer.Stop()
 | 
			
		||||
		}
 | 
			
		||||
		device.peers.mutex.Unlock()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// update state variables
 | 
			
		||||
 | 
			
		||||
	device.state.current = newIsUp
 | 
			
		||||
	device.state.changing.Set(false)
 | 
			
		||||
	device.state.mutex.Unlock()
 | 
			
		||||
 | 
			
		||||
	// check for state change in the mean time
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								peer.go
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								peer.go
									
									
									
									
									
								
							@ -4,7 +4,6 @@ import (
 | 
			
		||||
	"encoding/base64"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/sasha-s/go-deadlock"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
@ -15,7 +14,7 @@ const (
 | 
			
		||||
 | 
			
		||||
type Peer struct {
 | 
			
		||||
	isRunning                   AtomicBool
 | 
			
		||||
	mutex                       deadlock.RWMutex
 | 
			
		||||
	mutex                       sync.RWMutex
 | 
			
		||||
	persistentKeepaliveInterval uint64
 | 
			
		||||
	keyPairs                    KeyPairs
 | 
			
		||||
	handshake                   Handshake
 | 
			
		||||
@ -29,7 +28,7 @@ type Peer struct {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	time struct {
 | 
			
		||||
		mutex         deadlock.RWMutex
 | 
			
		||||
		mutex         sync.RWMutex
 | 
			
		||||
		lastSend      time.Time // last send message
 | 
			
		||||
		lastHandshake time.Time // last completed handshake
 | 
			
		||||
		nextKeepalive time.Time
 | 
			
		||||
@ -66,7 +65,7 @@ type Peer struct {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	routines struct {
 | 
			
		||||
		mutex    deadlock.Mutex // held when stopping / starting routines
 | 
			
		||||
		mutex    sync.Mutex     // held when stopping / starting routines
 | 
			
		||||
		starting sync.WaitGroup // routines pending start
 | 
			
		||||
		stopping sync.WaitGroup // routines pending stop
 | 
			
		||||
		stop     Signal         // size 0, stop all go-routines in peer
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user