Here (not related to the mcast issue) I am guilty of hiding my plans. A little later I was going to move creating the metadata (RB tree and index table) into the lock and then later after converting to xarrays replace the lock with the xa_lock which you have to have anyway because it's part of xa_alloc(). As you point out it is the index/key tree change that is visible to everyone. The races here are in trying to get the index or change the RB tree. Perhaps I should merge this change with the later one where I get rid of add/drop_index(). Or, rearrange things and convert to xarrays and then worry about races.