Removed debugging locks
This commit is contained in:
		
							parent
							
								
									a0f54cbe5a
								
							
						
					
					
						commit
						9c5083bd19
					
				
					 2 changed files with 44 additions and 53 deletions
				
			
		
							
								
								
									
										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 a new issue