What if "free" becomes locked *after* the  freeIsLocked executes? shouldn't we also check after the it.remove for this condition? Even so, that might still cause a race condition ...