SIOF-proof thread local
authorBen Maurer <bmaurer@fb.com>
Mon, 12 Oct 2015 21:35:54 +0000 (14:35 -0700)
committerfacebook-github-bot-4 <folly-bot@fb.com>
Tue, 13 Oct 2015 05:20:56 +0000 (22:20 -0700)
commit2bebe62f4abfe60242af8dc71a3d6b12f1416c8b
tree1b92c3f3a4692d46c70d8745589eb6a947568caf
parentfa5d6ef366fe65fe2dea40e5f592982d10e4d728
SIOF-proof thread local

Summary: Right now ThreadLocal & friends don't operate correctly when used as a
static variable (which is the idiomatic way to use them). The TLS id is
allocated in the static constructor so anybody who uses the ID prior to
first use would use an invalid ID. This makes ThreadLocal unusable for core
code such as per-thread reference counting.

This diff allocates the ID on first use. By making the invalid ID maxint we
avoid adding any extra branches in the fast path. We can then make the
constructor a constexpr meaning that initialization will happen prior to
any code running.

Reviewed By: @meyering

Differential Revision: D2457989

fb-gh-sync-id: 21d0c0d00c638fbbd36148d14d4c891f66f83706
folly/ThreadLocal.h
folly/detail/ThreadLocalDetail.h
folly/test/ThreadLocalTest.cpp