backend: oops, need to lock/unlock watchLock to avoid race condition