fix(watchhub.go) add a lock to protect the hashmap