Damn good question.  This was in response to a compiler warning.  I made the DBImpl::imm_ variable a volatile as a precaution against compiler optimizations.  imm_ is a MemTable object.  When I call imm_->Unref(), there is a compiler warning about loss of volatility if Unref() is also not volatile.  The issue is that a volatile object must have volatile member functions (so says the compiler).  Atomics and ref_count operate on atomic variables but they are either static functions or variables/operations within non-volatile objects.