protect the AMAN itself by locks
This commit is contained in:
		
							
								
								
									
										31
									
								
								aman/AMAN.py
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								aman/AMAN.py
									
									
									
									
									
								
							| @@ -4,6 +4,7 @@ import glob | |||||||
| import os | import os | ||||||
| import random | import random | ||||||
| import sys | import sys | ||||||
|  | from threading import Lock | ||||||
| import time | import time | ||||||
|  |  | ||||||
| from aman.com import AircraftReport_pb2 | from aman.com import AircraftReport_pb2 | ||||||
| @@ -36,6 +37,7 @@ class AMAN: | |||||||
|         self.Weather = None |         self.Weather = None | ||||||
|         self.WebUi = None |         self.WebUi = None | ||||||
|         self.Workers = [] |         self.Workers = [] | ||||||
|  |         self.WorkersLock = Lock() | ||||||
|  |  | ||||||
|         # read all system relevant configuration files |         # read all system relevant configuration files | ||||||
|         self.SystemConfig = System(os.path.join(configPath, 'System.ini')) |         self.SystemConfig = System(os.path.join(configPath, 'System.ini')) | ||||||
| @@ -53,6 +55,7 @@ class AMAN: | |||||||
|         self.Weather = Weather(self.SystemConfig.Weather) |         self.Weather = Weather(self.SystemConfig.Weather) | ||||||
|         self.Receiver = Euroscope(configPath, self.SystemConfig.Server, self) |         self.Receiver = Euroscope(configPath, self.SystemConfig.Server, self) | ||||||
|  |  | ||||||
|  |         self.acquireLock() | ||||||
|  |  | ||||||
|         # find the airport configurations and create the workers |         # find the airport configurations and create the workers | ||||||
|         airportsPath = os.path.join(os.path.join(configPath, 'airports'), '*.ini') |         airportsPath = os.path.join(os.path.join(configPath, 'airports'), '*.ini') | ||||||
| @@ -67,15 +70,41 @@ class AMAN: | |||||||
|             self.Workers.append(worker) |             self.Workers.append(worker) | ||||||
|             print('Started worker for ' + icao) |             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): |     def updateAircraftReport(self, report : AircraftReport_pb2.AircraftReport): | ||||||
|  |         self.acquireLock() | ||||||
|  |  | ||||||
|         # find the correct worker for the inbound |         # find the correct worker for the inbound | ||||||
|         for worker in self.Workers: |         for worker in self.Workers: | ||||||
|             if worker.Icao == report.destination: |             if worker.Icao == report.destination: | ||||||
|                 worker.acquireLock() |                 worker.acquireLock() | ||||||
|                 worker.ReportQueue[report.aircraft.callsign] = report |                 worker.ReportQueue[report.aircraft.callsign] = report | ||||||
|                 worker.releaseLock() |                 worker.releaseLock() | ||||||
|                 break |                 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