chore(watch/cancel): protect watcherHub with a lock