diff options
Diffstat (limited to 'bitbake/lib/bb/ui/knotty.py')
-rw-r--r-- | bitbake/lib/bb/ui/knotty.py | 62 |
1 files changed, 52 insertions, 10 deletions
diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py index 431baa15ef..5a97d040b0 100644 --- a/bitbake/lib/bb/ui/knotty.py +++ b/bitbake/lib/bb/ui/knotty.py | |||
@@ -420,6 +420,11 @@ def main(server, eventHandler, params, tf = TerminalFilter): | |||
420 | except bb.BBHandledException: | 420 | except bb.BBHandledException: |
421 | drain_events_errorhandling(eventHandler) | 421 | drain_events_errorhandling(eventHandler) |
422 | return 1 | 422 | return 1 |
423 | except Exception as e: | ||
424 | # bitbake-server comms failure | ||
425 | early_logger = bb.msg.logger_create('bitbake', sys.stdout) | ||
426 | early_logger.fatal("Attempting to set server environment: %s", e) | ||
427 | return 1 | ||
423 | 428 | ||
424 | if params.options.quiet == 0: | 429 | if params.options.quiet == 0: |
425 | console_loglevel = loglevel | 430 | console_loglevel = loglevel |
@@ -585,7 +590,12 @@ def main(server, eventHandler, params, tf = TerminalFilter): | |||
585 | return | 590 | return |
586 | 591 | ||
587 | llevel, debug_domains = bb.msg.constructLogOptions() | 592 | llevel, debug_domains = bb.msg.constructLogOptions() |
588 | server.runCommand(["setEventMask", server.getEventHandle(), llevel, debug_domains, _evt_list]) | 593 | try: |
594 | server.runCommand(["setEventMask", server.getEventHandle(), llevel, debug_domains, _evt_list]) | ||
595 | except (BrokenPipeError, EOFError) as e: | ||
596 | # bitbake-server comms failure | ||
597 | logger.fatal("Attempting to set event mask: %s", e) | ||
598 | return 1 | ||
589 | 599 | ||
590 | # The logging_tree module is *extremely* helpful in debugging logging | 600 | # The logging_tree module is *extremely* helpful in debugging logging |
591 | # domains. Uncomment here to dump the logging tree when bitbake starts | 601 | # domains. Uncomment here to dump the logging tree when bitbake starts |
@@ -594,7 +604,11 @@ def main(server, eventHandler, params, tf = TerminalFilter): | |||
594 | 604 | ||
595 | universe = False | 605 | universe = False |
596 | if not params.observe_only: | 606 | if not params.observe_only: |
597 | params.updateFromServer(server) | 607 | try: |
608 | params.updateFromServer(server) | ||
609 | except Exception as e: | ||
610 | logger.fatal("Fetching command line: %s", e) | ||
611 | return 1 | ||
598 | cmdline = params.parseActions() | 612 | cmdline = params.parseActions() |
599 | if not cmdline: | 613 | if not cmdline: |
600 | print("Nothing to do. Use 'bitbake world' to build everything, or run 'bitbake --help' for usage information.") | 614 | print("Nothing to do. Use 'bitbake world' to build everything, or run 'bitbake --help' for usage information.") |
@@ -605,7 +619,12 @@ def main(server, eventHandler, params, tf = TerminalFilter): | |||
605 | if cmdline['action'][0] == "buildTargets" and "universe" in cmdline['action'][1]: | 619 | if cmdline['action'][0] == "buildTargets" and "universe" in cmdline['action'][1]: |
606 | universe = True | 620 | universe = True |
607 | 621 | ||
608 | ret, error = server.runCommand(cmdline['action']) | 622 | try: |
623 | ret, error = server.runCommand(cmdline['action']) | ||
624 | except (BrokenPipeError, EOFError) as e: | ||
625 | # bitbake-server comms failure | ||
626 | logger.fatal("Command '{}' failed: %s".format(cmdline), e) | ||
627 | return 1 | ||
609 | if error: | 628 | if error: |
610 | logger.error("Command '%s' failed: %s" % (cmdline, error)) | 629 | logger.error("Command '%s' failed: %s" % (cmdline, error)) |
611 | return 1 | 630 | return 1 |
@@ -854,15 +873,26 @@ def main(server, eventHandler, params, tf = TerminalFilter): | |||
854 | 873 | ||
855 | logger.error("Unknown event: %s", event) | 874 | logger.error("Unknown event: %s", event) |
856 | 875 | ||
876 | except (BrokenPipeError, EOFError) as e: | ||
877 | # bitbake-server comms failure, don't attempt further comms and exit | ||
878 | logger.fatal("Executing event: %s", e) | ||
879 | return_value = 1 | ||
880 | errors = errors + 1 | ||
881 | main.shutdown = 3 | ||
857 | except EnvironmentError as ioerror: | 882 | except EnvironmentError as ioerror: |
858 | termfilter.clearFooter() | 883 | termfilter.clearFooter() |
859 | # ignore interrupted io | 884 | # ignore interrupted io |
860 | if ioerror.args[0] == 4: | 885 | if ioerror.args[0] == 4: |
861 | continue | 886 | continue |
862 | sys.stderr.write(str(ioerror)) | 887 | sys.stderr.write(str(ioerror)) |
863 | if not params.observe_only: | ||
864 | _, error = server.runCommand(["stateForceShutdown"]) | ||
865 | main.shutdown = 2 | 888 | main.shutdown = 2 |
889 | if not params.observe_only: | ||
890 | try: | ||
891 | _, error = server.runCommand(["stateForceShutdown"]) | ||
892 | except (BrokenPipeError, EOFError) as e: | ||
893 | # bitbake-server comms failure, don't attempt further comms and exit | ||
894 | logger.fatal("Unable to force shutdown: %s", e) | ||
895 | main.shutdown = 3 | ||
866 | except KeyboardInterrupt: | 896 | except KeyboardInterrupt: |
867 | termfilter.clearFooter() | 897 | termfilter.clearFooter() |
868 | if params.observe_only: | 898 | if params.observe_only: |
@@ -871,9 +901,13 @@ def main(server, eventHandler, params, tf = TerminalFilter): | |||
871 | 901 | ||
872 | def state_force_shutdown(): | 902 | def state_force_shutdown(): |
873 | print("\nSecond Keyboard Interrupt, stopping...\n") | 903 | print("\nSecond Keyboard Interrupt, stopping...\n") |
874 | _, error = server.runCommand(["stateForceShutdown"]) | 904 | try: |
875 | if error: | 905 | _, error = server.runCommand(["stateForceShutdown"]) |
876 | logger.error("Unable to cleanly stop: %s" % error) | 906 | if error: |
907 | logger.error("Unable to cleanly stop: %s" % error) | ||
908 | except (BrokenPipeError, EOFError) as e: | ||
909 | # bitbake-server comms failure | ||
910 | logger.fatal("Unable to cleanly stop: %s", e) | ||
877 | 911 | ||
878 | if not params.observe_only and main.shutdown == 1: | 912 | if not params.observe_only and main.shutdown == 1: |
879 | state_force_shutdown() | 913 | state_force_shutdown() |
@@ -886,6 +920,9 @@ def main(server, eventHandler, params, tf = TerminalFilter): | |||
886 | _, error = server.runCommand(["stateShutdown"]) | 920 | _, error = server.runCommand(["stateShutdown"]) |
887 | if error: | 921 | if error: |
888 | logger.error("Unable to cleanly shutdown: %s" % error) | 922 | logger.error("Unable to cleanly shutdown: %s" % error) |
923 | except (BrokenPipeError, EOFError) as e: | ||
924 | # bitbake-server comms failure | ||
925 | logger.fatal("Unable to cleanly shutdown: %s", e) | ||
889 | except KeyboardInterrupt: | 926 | except KeyboardInterrupt: |
890 | state_force_shutdown() | 927 | state_force_shutdown() |
891 | 928 | ||
@@ -893,9 +930,14 @@ def main(server, eventHandler, params, tf = TerminalFilter): | |||
893 | except Exception as e: | 930 | except Exception as e: |
894 | import traceback | 931 | import traceback |
895 | sys.stderr.write(traceback.format_exc()) | 932 | sys.stderr.write(traceback.format_exc()) |
896 | if not params.observe_only: | ||
897 | _, error = server.runCommand(["stateForceShutdown"]) | ||
898 | main.shutdown = 2 | 933 | main.shutdown = 2 |
934 | if not params.observe_only: | ||
935 | try: | ||
936 | _, error = server.runCommand(["stateForceShutdown"]) | ||
937 | except (BrokenPipeError, EOFError) as e: | ||
938 | # bitbake-server comms failure, don't attempt further comms and exit | ||
939 | logger.fatal("Unable to force shutdown: %s", e) | ||
940 | main.shudown = 3 | ||
899 | return_value = 1 | 941 | return_value = 1 |
900 | try: | 942 | try: |
901 | termfilter.clearFooter() | 943 | termfilter.clearFooter() |