protect the AMAN itself by locks
This commit is contained in:
		
							
								
								
									
										29
									
								
								aman/AMAN.py
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								aman/AMAN.py
									
									
									
									
									
								
							| @@ -4,6 +4,7 @@ import glob | ||||
| import os | ||||
| import random | ||||
| import sys | ||||
| from threading import Lock | ||||
| import time | ||||
|  | ||||
| from aman.com import AircraftReport_pb2 | ||||
| @@ -36,6 +37,7 @@ class AMAN: | ||||
|         self.Weather = None | ||||
|         self.WebUi = None | ||||
|         self.Workers = [] | ||||
|         self.WorkersLock = Lock() | ||||
|  | ||||
|         # read all system relevant configuration files | ||||
|         self.SystemConfig = System(os.path.join(configPath, 'System.ini')) | ||||
| @@ -53,6 +55,7 @@ class AMAN: | ||||
|         self.Weather = Weather(self.SystemConfig.Weather) | ||||
|         self.Receiver = Euroscope(configPath, self.SystemConfig.Server, self) | ||||
|  | ||||
|         self.acquireLock() | ||||
|  | ||||
|         # find the airport configurations and create the workers | ||||
|         airportsPath = os.path.join(os.path.join(configPath, 'airports'), '*.ini') | ||||
| @@ -67,11 +70,22 @@ class AMAN: | ||||
|             self.Workers.append(worker) | ||||
|             print('Started worker for ' + icao) | ||||
|  | ||||
|         self.releaseLock() | ||||
|  | ||||
|         # initialize the random number generator | ||||
|         random.seed(time.time()) | ||||
|  | ||||
|     def acquireLock(self): | ||||
|         if None != self.WorkersLock: | ||||
|             self.WorkersLock.acquire() | ||||
|  | ||||
|     def releaseLock(self): | ||||
|         if None != self.WorkersLock: | ||||
|             self.WorkersLock.release() | ||||
|  | ||||
|     def updateAircraftReport(self, report : AircraftReport_pb2.AircraftReport): | ||||
|         self.acquireLock() | ||||
|  | ||||
|         # find the correct worker for the inbound | ||||
|         for worker in self.Workers: | ||||
|             if worker.Icao == report.destination: | ||||
| @@ -79,3 +93,18 @@ class AMAN: | ||||
|                 worker.ReportQueue[report.aircraft.callsign] = report | ||||
|                 worker.releaseLock() | ||||
|                 break | ||||
|  | ||||
|         self.releaseLock() | ||||
|  | ||||
|     def findAirport(self, icao : str): | ||||
|         self.acquireLock() | ||||
|  | ||||
|         airport = None | ||||
|         for worker in self.Workers: | ||||
|             if icao == worker.Icao: | ||||
|                 airport = worker | ||||
|                 break | ||||
|  | ||||
|         self.releaseLock() | ||||
|  | ||||
|         return airport | ||||
|   | ||||
		Reference in New Issue
	
	Block a user