ASTUnit Concurrent Access

In ASTUnit.h, there is a ConcurrencyState class which has the following comment;

/// \brief Allows us to assert that ASTUnit is not being used concurrently,
/// which is not supported.
///
/// Clients should create instances of the ConcurrencyCheck class whenever
/// using the ASTUnit in a way that isn’t intended to be concurrent, which is
/// just about any usage.
/// Becomes a noop in release mode; only useful for debug mode checking.

In ASTUnit.cpp, there is a function called cleanupOnDiskMapAtExit(), which has the following comment:

// Use the mutex because there can be an alive thread destroying an ASTUnit.

Can someone clarify the intended behavior here? These two comments seem to contradict each other.

llvm-dev → cfe-dev, since ASTUnit.h is a Clang thing.

Maybe Manuel knows what it is, since it’s used by Tooling?

llvm-dev -> cfe-dev, since ASTUnit.h is a Clang thing.

Maybe Manuel knows what it is, since it's used by Tooling?

I'm not aware that ASTUnit is used by libTooling. As far as I know, clang
is not intended to be thread-safe, and thus probably isn't.