};
void updateKnownGood(final USK origUSK, final long number, final ClientContext context) {
if(logMINOR) Logger.minor(this, "Updating (known good) "+origUSK.getURI()+" : "+number);
USK clear = origUSK.clearCopy();
final USKCallback[] callbacks;
boolean newSlot = false;
synchronized(this) {
Long l = latestKnownGoodByClearUSK.get(clear);
if(logMINOR) Logger.minor(this, "Old known good: "+l);
if((l == null) || (number > l.longValue())) {
l = Long.valueOf(number);
latestKnownGoodByClearUSK.put(clear, l);
if(logMINOR) Logger.minor(this, "Put "+number);
} else
return; // If it's in KnownGood, it will also be in Slot
l = latestSlotByClearUSK.get(clear);
if(logMINOR) Logger.minor(this, "Old slot: "+l);
if((l == null) || (number > l.longValue())) {
l = Long.valueOf(number);
latestSlotByClearUSK.put(clear, l);
if(logMINOR) Logger.minor(this, "Put "+number);
newSlot = true;
}
callbacks = subscribersByClearUSK.get(clear);
}
if(callbacks != null) {
// Run off-thread, because of locking, and because client callbacks may take some time
final USK usk = origUSK.copy(number);
final boolean newSlotToo = newSlot;
for(final USKCallback callback : callbacks)
context.mainExecutor.execute(new Runnable() {
@Override
public void run() {