Fix race condition while iterating over clients
This commit is contained in:
		| @@ -114,6 +114,7 @@ def moderated(fro, chan, message): | ||||
| def kickAll(fro, chan, message): | ||||
| 	# Kick everyone but mods/admins | ||||
| 	toKick = [] | ||||
| 	with glob.tokens: | ||||
| 		for key, value in glob.tokens.tokens.items(): | ||||
| 			if not value.admin: | ||||
| 				toKick.append(key) | ||||
| @@ -336,6 +337,7 @@ def systemMaintenance(fro, chan, message): | ||||
| 		who = [] | ||||
|  | ||||
| 		# Disconnect everyone but mod/admins | ||||
| 		with glob.tokens: | ||||
| 			for _, value in glob.tokens.tokens.items(): | ||||
| 				if not value.admin: | ||||
| 					who.append(value.userID) | ||||
|   | ||||
| @@ -184,6 +184,7 @@ def handle(tornadoRequest): | ||||
| 			responseToken.enqueue(serverPackets.mainMenuIcon(glob.banchoConf.config["menuIcon"])) | ||||
|  | ||||
| 		# Send online users' panels | ||||
| 		with glob.tokens: | ||||
| 			for _, token in glob.tokens.tokens.items(): | ||||
| 				if not token.restricted: | ||||
| 					responseToken.enqueue(serverPackets.userPanel(token.userID)) | ||||
|   | ||||
| @@ -13,6 +13,13 @@ from objects import osuToken | ||||
| class tokenList: | ||||
| 	def __init__(self): | ||||
| 		self.tokens = {} | ||||
| 		self._lock = threading.Lock() | ||||
|  | ||||
| 	def __enter__(self): | ||||
| 		self._lock.acquire() | ||||
|  | ||||
| 	def __exit__(self, exc_type, exc_val, exc_tb): | ||||
| 		self._lock.release() | ||||
|  | ||||
| 	def addToken(self, userID, ip = "", irc = False, timeOffset=0, tournament=False): | ||||
| 		""" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user