• A
    Simplify thread-local static initialization · afad5bd1
    Andrew Kryczka 提交于
    Summary:
    The call stack used to look like this during static initialization:
    
      #0  0x00000000008032d1 in rocksdb::ThreadLocalPtr::StaticMeta::StaticMeta() (this=0x7ffff683b300) at util/thread_local.cc:172
      #1  0x00000000008030a7 in rocksdb::ThreadLocalPtr::Instance() () at util/thread_local.cc:135
      #2  0x000000000080310f in rocksdb::ThreadLocalPtr::StaticMeta::Mutex() () at util/thread_local.cc:141
      #3  0x0000000000803103 in rocksdb::ThreadLocalPtr::StaticMeta::InitSingletons() () at util/thread_local.cc:139
      #4  0x000000000080305d in rocksdb::ThreadLocalPtr::InitSingletons() () at util/thread_local.cc:106
    
    It involves outer/inner classes and the call stacks goes
    outer->inner->outer->inner, which is too difficult to understand. We can avoid
    a level of back-and-forth by skipping StaticMeta::InitSingletons(), which
    doesn't initialize anything beyond what ThreadLocalPtr::Instance() already
    initializes.
    
    Now the call stack looks like this during static initialization:
    
      #0  0x00000000008032c5 in rocksdb::ThreadLocalPtr::StaticMeta::StaticMeta() (this=0x7ffff683b300) at util/thread_local.cc:170
      #1  0x00000000008030a7 in rocksdb::ThreadLocalPtr::Instance() () at util/thread_local.cc:135
      #2  0x000000000080305d in rocksdb::ThreadLocalPtr::InitSingletons() () at util/thread_local.cc:106
    
    Test Plan:
    unit tests
    
    verify StaticMeta::mutex_ is still initialized in DefaultEnv() (StaticMeta::mutex_ is the only variable intended to be initialized via StaticMeta::InitSingletons() which I removed)
    
      #0  0x00000000005cee17 in rocksdb::port::Mutex::Mutex(bool) (this=0x7ffff69500b0, adaptive=false) at port/port_posix.cc:52
      #1  0x0000000000769cf8 in rocksdb::ThreadLocalPtr::StaticMeta::StaticMeta() (this=0x7ffff6950000) at util/thread_local.cc:168
      #2  0x0000000000769a53 in rocksdb::ThreadLocalPtr::Instance() () at util/thread_local.cc:133
      #3  0x0000000000769a09 in rocksdb::ThreadLocalPtr::InitSingletons() () at util/thread_local.cc:105
      #4  0x0000000000647d98 in rocksdb::Env::Default() () at util/env_posix.cc:845
    
    Reviewers: lightmark, yhchiang, sdong
    
    Reviewed By: sdong
    
    Subscribers: arahut, IslamAbdelRahman, yiwu, andrewkr, dhruba, leveldb
    
    Differential Revision: https://reviews.facebook.net/D60813
    afad5bd1
thread_local.cc 12.5 KB