This repository was archived by the owner on Aug 15, 2019. It is now read-only.

Description
If any unhandled exception occurs during BoardRunner.run, it will of course print a stacktrace and kill the subprocess, without calling make_safe.
A minimal solution to this would be to wrap the whole lot in a try block, with a finally: self.board.make_safe(). Even better, it could log the exception and attempt to continue running.
Note that currently exceptions can occur as a result of invalid input from the socket - for example, MotorBoard.command will throw a ValueError if any of the speed values are out of range. If this is the ideal response, then it is even more important that the BoardRunner be made resistant to exceptions.
This almost certainly applies to the master process (haven't checked though).