lesson learned. go mutexes aren't reentrant. also, handle QUIT, kinda.