fix data races in controller

Fix #305
This is still a little cryptic. :) If I can be pedantic for a second, I think what would really make this change more accessible is a two or three sentence comment here explaining the concurrency implications of testing code which calls watch.