diff options
Diffstat (limited to 'meta/lib')
-rw-r--r-- | meta/lib/oeqa/utils/qemurunner.py | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py index 6734cee48d..3b7398b872 100644 --- a/meta/lib/oeqa/utils/qemurunner.py +++ b/meta/lib/oeqa/utils/qemurunner.py | |||
@@ -451,7 +451,7 @@ class QemuRunner: | |||
451 | self.logger.debug("Waiting at most %d seconds for login banner (%s)" % | 451 | self.logger.debug("Waiting at most %d seconds for login banner (%s)" % |
452 | (self.boottime, time.strftime("%D %H:%M:%S"))) | 452 | (self.boottime, time.strftime("%D %H:%M:%S"))) |
453 | endtime = time.time() + self.boottime | 453 | endtime = time.time() + self.boottime |
454 | socklist = [self.server_socket] | 454 | filelist = [self.server_socket, self.runqemu.stdout] |
455 | reachedlogin = False | 455 | reachedlogin = False |
456 | stopread = False | 456 | stopread = False |
457 | qemusock = None | 457 | qemusock = None |
@@ -459,24 +459,32 @@ class QemuRunner: | |||
459 | data = b'' | 459 | data = b'' |
460 | while time.time() < endtime and not stopread: | 460 | while time.time() < endtime and not stopread: |
461 | try: | 461 | try: |
462 | sread, swrite, serror = select.select(socklist, [], [], 5) | 462 | sread, swrite, serror = select.select(filelist, [], [], 5) |
463 | except InterruptedError: | 463 | except InterruptedError: |
464 | continue | 464 | continue |
465 | for sock in sread: | 465 | for file in sread: |
466 | if sock is self.server_socket: | 466 | if file is self.server_socket: |
467 | qemusock, addr = self.server_socket.accept() | 467 | qemusock, addr = self.server_socket.accept() |
468 | qemusock.setblocking(0) | 468 | qemusock.setblocking(False) |
469 | socklist.append(qemusock) | 469 | filelist.append(qemusock) |
470 | socklist.remove(self.server_socket) | 470 | filelist.remove(self.server_socket) |
471 | self.logger.debug("Connection from %s:%s" % addr) | 471 | self.logger.debug("Connection from %s:%s" % addr) |
472 | else: | 472 | else: |
473 | # try to avoid reading only a single character at a time | 473 | # try to avoid reading only a single character at a time |
474 | time.sleep(0.1) | 474 | time.sleep(0.1) |
475 | data = data + sock.recv(1024) | 475 | if hasattr(file, 'read'): |
476 | read = file.read(1024) | ||
477 | elif hasattr(file, 'recv'): | ||
478 | read = file.recv(1024) | ||
479 | else: | ||
480 | self.logger.error('Invalid file type: %s\n%s' % (file)) | ||
481 | read = b'' | ||
482 | |||
483 | data = data + read | ||
476 | if data: | 484 | if data: |
477 | bootlog += data | 485 | bootlog += data |
478 | if self.serial_ports < 2: | 486 | if self.serial_ports < 2: |
479 | # this socket has mixed console/kernel data, log it to logfile | 487 | # this file has mixed console/kernel data, log it to logfile |
480 | self.log(data) | 488 | self.log(data) |
481 | 489 | ||
482 | data = b'' | 490 | data = b'' |
@@ -493,8 +501,8 @@ class QemuRunner: | |||
493 | # no need to check if reachedlogin unless we support multiple connections | 501 | # no need to check if reachedlogin unless we support multiple connections |
494 | self.logger.debug("QEMU socket disconnected before login banner reached. (%s)" % | 502 | self.logger.debug("QEMU socket disconnected before login banner reached. (%s)" % |
495 | time.strftime("%D %H:%M:%S")) | 503 | time.strftime("%D %H:%M:%S")) |
496 | socklist.remove(sock) | 504 | filelist.remove(file) |
497 | sock.close() | 505 | file.close() |
498 | stopread = True | 506 | stopread = True |
499 | 507 | ||
500 | if not reachedlogin: | 508 | if not reachedlogin: |