From 917ceef5ac5bd0792900e2d94e94610e0a36d724 Mon Sep 17 00:00:00 2001 From: Jonathan Mace <jcmace@mpi-sws.org> Date: Tue, 21 May 2019 14:55:09 +0000 Subject: [PATCH] Add some auto baggage macros --- include/baggage.h | 27 +++++++++++++++++++++++++++ src/main.cc | 25 ++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/include/baggage.h b/include/baggage.h index 0e4db99..6c02ad0 100644 --- a/include/baggage.h +++ b/include/baggage.h @@ -91,5 +91,32 @@ namespace ThreadLocalBaggage { } +#define BAGGAGE(b) BaggageHelpers::AutoBaggageScopeImpl __baggage__auto_baggage_(&b, __FILE__, __LINE__) + + +namespace BaggageHelpers { + + // Used by AutoBaggageScope macro to scope the current block to the provided baggage + class AutoBaggageScopeImpl { + private: + Baggage* baggageSource; + Baggage suspendedBaggage; + const char* file; + int line; + public: + AutoBaggageScopeImpl(Baggage* b, const char* file, int line) : file(file), line(line) { + baggageSource = b; + suspendedBaggage = ThreadLocalBaggage::Swap(*b, file, line); + } + + ~AutoBaggageScopeImpl() { + *baggageSource = ThreadLocalBaggage::Swap(suspendedBaggage, file, line); + } + + }; + + +} + #endif \ No newline at end of file diff --git a/src/main.cc b/src/main.cc index 40d7fb8..44b1971 100644 --- a/src/main.cc +++ b/src/main.cc @@ -33,7 +33,6 @@ int main(int argc, char *argv[]) { XTRACE("c", {{"key1", "value1"}, {"key2", "value2"}}); Baggage branched_baggage = BRANCH_CURRENT_BAGGAGE(); - std::thread branched_thread([&branched_baggage]() { SET_CURRENT_BAGGAGE(branched_baggage); XTRACE("f"); @@ -41,11 +40,35 @@ int main(int argc, char *argv[]) { branched_baggage = TAKE_CURRENT_BAGGAGE(); }); + + // Use the auto baggage macro + Baggage branched_baggage2 = BRANCH_CURRENT_BAGGAGE(); + std::thread branched_thread2([&branched_baggage2]() { + BAGGAGE(branched_baggage2); + + XTRACE("f"); + XTRACE("g"); + }); + + Baggage inline_branched_baggage = BRANCH_CURRENT_BAGGAGE(); + + { + BAGGAGE(inline_branched_baggage); + + XTRACE("hello world"); + XTRACE("goodbyte world"); + } + + XTRACE("d"); XTRACE("e"); branched_thread.join(); + branched_thread2.join(); + JOIN_CURRENT_BAGGAGE(branched_baggage); + JOIN_CURRENT_BAGGAGE(branched_baggage2); + JOIN_CURRENT_BAGGAGE(inline_branched_baggage); XTRACE("h"); -- GitLab