diff options
Diffstat (limited to 'packages/Python/lldbsuite/test/tools/lldb-server/socket_packet_pump.py')
-rw-r--r-- | packages/Python/lldbsuite/test/tools/lldb-server/socket_packet_pump.py | 60 |
1 files changed, 33 insertions, 27 deletions
diff --git a/packages/Python/lldbsuite/test/tools/lldb-server/socket_packet_pump.py b/packages/Python/lldbsuite/test/tools/lldb-server/socket_packet_pump.py index 795a8c6652d0..9f594b7df73c 100644 --- a/packages/Python/lldbsuite/test/tools/lldb-server/socket_packet_pump.py +++ b/packages/Python/lldbsuite/test/tools/lldb-server/socket_packet_pump.py @@ -26,6 +26,33 @@ def _dump_queue(the_queue): print(codecs.encode(the_queue.get(True), "string_escape")) print("\n") +class PumpQueues(object): + def __init__(self): + self._output_queue = queue.Queue() + self._packet_queue = queue.Queue() + + def output_queue(self): + return self._output_queue + + def packet_queue(self): + return self._packet_queue + + def verify_queues_empty(self): + # Warn if there is any content left in any of the queues. + # That would represent unmatched packets. + if not self.output_queue().empty(): + print("warning: output queue entries still exist:") + _dump_queue(self.output_queue()) + print("from here:") + traceback.print_stack() + + if not self.packet_queue().empty(): + print("warning: packet queue entries still exist:") + _dump_queue(self.packet_queue()) + print("from here:") + traceback.print_stack() + + class SocketPacketPump(object): """A threaded packet reader that partitions packets into two streams. @@ -40,18 +67,17 @@ class SocketPacketPump(object): _GDB_REMOTE_PACKET_REGEX = re.compile(r'^\$([^\#]*)#[0-9a-fA-F]{2}') - def __init__(self, pump_socket, logger=None): + def __init__(self, pump_socket, pump_queues, logger=None): if not pump_socket: raise Exception("pump_socket cannot be None") - self._output_queue = queue.Queue() - self._packet_queue = queue.Queue() self._thread = None self._stop_thread = False self._socket = pump_socket self._logger = logger self._receive_buffer = "" self._accumulated_output = "" + self._pump_queues = pump_queues def __enter__(self): """Support the python 'with' statement. @@ -66,20 +92,6 @@ class SocketPacketPump(object): Shut down the pump thread.""" self.stop_pump_thread() - # Warn if there is any content left in any of the queues. - # That would represent unmatched packets. - if not self.output_queue().empty(): - print("warning: output queue entries still exist:") - _dump_queue(self.output_queue()) - print("from here:") - traceback.print_stack() - - if not self.packet_queue().empty(): - print("warning: packet queue entries still exist:") - _dump_queue(self.packet_queue()) - print("from here:") - traceback.print_stack() - def start_pump_thread(self): if self._thread: raise Exception("pump thread is already running") @@ -92,12 +104,6 @@ class SocketPacketPump(object): if self._thread: self._thread.join() - def output_queue(self): - return self._output_queue - - def packet_queue(self): - return self._packet_queue - def _process_new_bytes(self, new_bytes): if not new_bytes: return @@ -114,7 +120,7 @@ class SocketPacketPump(object): has_more = False # handle '+' ack elif self._receive_buffer[0] == "+": - self._packet_queue.put("+") + self._pump_queues.packet_queue().put("+") self._receive_buffer = self._receive_buffer[1:] if self._logger: self._logger.debug( @@ -132,10 +138,10 @@ class SocketPacketPump(object): if new_output_content: # This was an $O packet with new content. self._accumulated_output += new_output_content - self._output_queue.put(self._accumulated_output) + self._pump_queues.output_queue().put(self._accumulated_output) else: # Any packet other than $O. - self._packet_queue.put(packet_match.group(0)) + self._pump_queues.packet_queue().put(packet_match.group(0)) # Remove the parsed packet from the receive # buffer. @@ -173,7 +179,7 @@ class SocketPacketPump(object): # Likely a closed socket. Done with the pump thread. if self._logger: self._logger.debug( - "socket read failed, stopping pump read thread") + "socket read failed, stopping pump read thread\n" + traceback.format_exc(3)) break self._process_new_bytes(new_bytes) |