alloc-tls
=========
`alloc-tls` provides the `alloc_thread_local!` macro, a near-drop-in replacement
for the standard library's `thread_local!` macro that is safe for use in
implementing a global allocator.
Unlike `thread_local!`, `alloc_thread_local!` address the following issues
unique to implementing a global allocator:
- On platforms that support the `#[thread_local]` attribute, registering
destructors for types that implement `Drop` requires allocation. When a
thread-local is initialized from a call to an allocation function (`malloc`,
`free`, etc), this causes reentrancy. `alloc_thread_local!` can detect this.
- On Mac, it is not safe to access TLS while a dynamic library is being loaded.
When implementing a Mac dynamic library that provides a global allocator,
`alloc_thread_local!` can detect whether the library has been loaded or not,
and can avoid using TLS if `malloc` or other similar calls are made from the
loader itself during loading.
Known limitations:
- `alloc-tls` does not currently support platforms that do not support the
`#[thread_local]` attribute.