This repository was archived by the owner on Oct 27, 2020. It is now read-only.

Description
As I'm sure anyone who has ever written an autonomous OpMode knows, if your thread does not exit within 1000ms of a stop being requested, the watchdog growls, and the app force-crashes itself in order to terminate your rogue thread. (This is necessary because it is not possible to kill -9
a single thread).
However, I have found a serious bug in the implementation of the watchdog: it appears that the watchdog of the active OpMode is abandoned when a "Restart Robot" command is issued. This causes the RC device to perform a restart robot as if everything were normal, but the rogue thread continues to run in the background.
Here's a sample OpMode:
@TeleOp
public class RogueLoop extends LinearOpMode
{
@Override
public void runOpMode()
{
waitForStart();
while (true) //muahaha Thread.interrupt() ain't gonna do you any good here!
{
long iT = System.currentTimeMillis();
while (System.currentTimeMillis() - iT < 500)
{
Thread.yield();
}
System.out.println("Sysout from rogue loop");
}
}
}
Steps to reproduce:
- Deploy the SDK to the RC phone with the above OpMode added to the TeamCode module
- Ensure that Android Studio is printing logcat to the bottom pane
- Ensure the DS and RC phones are connected as normal
- Init and run the "RogueLoop" OpMode
- Observe that the OpMode prints a message to logcat every 500ms
- While the OpMode is still running, press "Restart Robot".
- Wait for the "Restart Robot" to complete
- Observe that the rogue OpMode continues to print messages to the logcat every 500ms, despite the DS and RC showing every indication that only the "StopRobot" OpMode is being run