If two threads call update with different bytes, but the same path, there is a race condition here where they both might end up calling announce().

We can either make this thread-safe, or we can remove the delegated call to announce() if it hasn't already been announced.  I'm fine with either, but this needs to be thread-safe.