When listCollections() calls viewCatalog::iterate, it's possible that there is a concurrent modification to "system.views" collection which invalidates the viewCatalog between viewCatalog's reload and invariant for _valid.
This function (and its invariant) is still meaningful for viewCatalog::create/update/drop because the collection lock should prevent such concurrent modification to "system.views". However, ViewCatalog::iterate does not have those locks so it shouldn't invariant that _valid is true after reload.