From a955058edd1368a6ceb5681fc37875cb3a2f586c Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Fri, 12 Jan 2018 09:02:26 +0100 Subject: [PATCH] insert lock-methods into server --- boswatch/network/server.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/boswatch/network/server.py b/boswatch/network/server.py index 2ea6202..3fe9c6e 100644 --- a/boswatch/network/server.py +++ b/boswatch/network/server.py @@ -17,6 +17,7 @@ import logging import socketserver import threading +import time logging.debug("- %s loaded", __name__) @@ -30,6 +31,7 @@ class TCPHandler(socketserver.BaseRequestHandler): """!Handles the request from an single client in a own thread Insert a request in the clients[] list and send a [ack]""" + clientsLock = threading.Lock() # todo check if needed data = 1 cur_thread = threading.current_thread() req_name = str(cur_thread) + " " + self.client_address[0] @@ -42,7 +44,9 @@ class TCPHandler(socketserver.BaseRequestHandler): # add a new entry at first position (index 0) with client IP # and the decoded data dict as an string in utf-8 - _clients.insert(0, (self.client_address[0], data)) + clientsLock.acquire() # todo check if needed - only append not modify data + _clients.insert(0, (self.client_address[0], data, time.time())) # time() to calc time in queue + clientsLock.release() # todo check if needed logging.debug("Add data to queue") logging.debug(req_name + " send: [ack]") @@ -81,6 +85,7 @@ class TCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer): self.flushData() self._server_thread = threading.Thread(target=self._server.serve_forever) + self._server_thread.name = "Thread-BWServer" self._server_thread.daemon = True self._server_thread.start() logging.debug("TCPServer started in Thread: " + self._server_thread.name) @@ -127,7 +132,10 @@ class TCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer): @return Next data packet.py from intern queue""" if _clients: + clientsLock = threading.Lock() # todo check if needed + clientsLock.acquire() # todo check if needed - only append not modify data message = _clients.pop() + clientsLock.release() # todo check if needed logging.debug("Get data from queue") return message return None @@ -136,4 +144,7 @@ class TCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer): def flushData(): """!To flush all existing data in queue""" logging.debug("Flush client data queue") + clientsLock = threading.Lock() # todo check if needed + clientsLock.acquire() # todo check if needed - here is a modify? _clients.clear() + clientsLock.release() # todo check if needed