diff options
| -rw-r--r-- | meta/lib/oeqa/utils/qemurunner.py | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py index d079072af8..6d36df6953 100644 --- a/meta/lib/oeqa/utils/qemurunner.py +++ b/meta/lib/oeqa/utils/qemurunner.py | |||
| @@ -412,12 +412,33 @@ class LoggingThread(threading.Thread): | |||
| 412 | 412 | ||
| 413 | # Actual data to be logged | 413 | # Actual data to be logged |
| 414 | elif self.readsock.fileno() == event[0]: | 414 | elif self.readsock.fileno() == event[0]: |
| 415 | data = self.readsock.recv(1024) | 415 | data = self.recv_loop() |
| 416 | if not data: | ||
| 417 | raise Exception("No data on read ready socket") | ||
| 418 | |||
| 419 | self.logfunc(data) | 416 | self.logfunc(data) |
| 420 | 417 | ||
| 418 | # Since the socket is non-blocking make sure to honor EAGAIN | ||
| 419 | # and EWOULDBLOCK | ||
| 420 | def recv_loop(self): | ||
| 421 | while True: | ||
| 422 | try: | ||
| 423 | data = self.readsock.recv(1024) | ||
| 424 | break | ||
| 425 | except socket.error as e: | ||
| 426 | if e.errno == errno.EAGAIN or e.errno == errno.EWOULDBLOCK: | ||
| 427 | continue | ||
| 428 | else: | ||
| 429 | raise | ||
| 430 | |||
| 431 | if not data: | ||
| 432 | raise Exception("No data on read ready socket") | ||
| 433 | elif data == 0: | ||
| 434 | # This actually means an orderly shutdown | ||
| 435 | # happened. But for this code it counts as an | ||
| 436 | # error since the connection shouldn't go away | ||
| 437 | # until qemu exits. | ||
| 438 | raise Exception("Console connection closed unexpectedly") | ||
| 439 | |||
| 440 | return data | ||
| 441 | |||
| 421 | def stringify_event(self, event): | 442 | def stringify_event(self, event): |
| 422 | val = '' | 443 | val = '' |
| 423 | if select.POLLERR == event: | 444 | if select.POLLERR == event: |
