- void* stack_ = nullptr; /* the thread stack */
- SwappedContextFactory* const factory_; // for sequential and parallel run_all()
+ static thread_local SwappedContext* worker_context_;
+
+ unsigned char* stack_ = nullptr; // the thread stack
+ SwappedContextFactory& factory_; // for sequential and parallel run_all()
+
+#if HAVE_VALGRIND_H
+ unsigned int valgrind_stack_id_ = 0;
+#endif
+#if HAVE_SANITIZER_ADDRESS_FIBER_SUPPORT
+ const void* asan_stack_ = nullptr;
+ size_t asan_stack_size_ = 0;
+ SwappedContext* asan_ctx_ = nullptr;
+ bool asan_stop_ = false;
+#endif
+#if HAVE_SANITIZER_THREAD_FIBER_SUPPORT
+ void* tsan_fiber_;
+#endif
+
+ virtual void swap_into_for_real(SwappedContext* to) = 0; // Defined in Raw, Boost and UContext subclasses