pw_thread: correct option setters to return a reference

Corrects the backend specific thread Options setters to return a
reference instead of a copy.

Change-Id: Ifebcf742f0a0f65f5cc99d15df724e6acad10e49
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/46240
Reviewed-by: Wyatt Hepler <hepler@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
Pigweed-Auto-Submit: Ewout van Bekkum <ewout@google.com>
diff --git a/pw_thread_embos/public/pw_thread_embos/options.h b/pw_thread_embos/public/pw_thread_embos/options.h
index fb33066..d024fde 100644
--- a/pw_thread_embos/public/pw_thread_embos/options.h
+++ b/pw_thread_embos/public/pw_thread_embos/options.h
@@ -49,7 +49,7 @@
   // Sets the name for the embOS task, this is optional.
   // Note that this will be deep copied into the context and may be truncated
   // based on PW_THREAD_EMBOS_CONFIG_MAX_THREAD_NAME_LEN.
-  constexpr Options set_name(const char* name) {
+  constexpr Options& set_name(const char* name) {
     name_ = name;
     return *this;
   }
@@ -58,7 +58,7 @@
   // see embOS OS_CreateTaskEx for more detail.
   //
   // Precondition: This must be >= PW_THREAD_EMBOS_CONFIG_MIN_PRIORITY.
-  constexpr Options set_priority(OS_PRIO priority) {
+  constexpr Options& set_priority(OS_PRIO priority) {
     PW_DASSERT(priority >= config::kMinimumPriority);
     priority_ = priority;
     return *this;
@@ -70,7 +70,7 @@
   // A value of 0 disables time-slicing of this thread.
   //
   // Precondition: This must be <= 255 ticks.
-  constexpr Options set_time_slice_interval(OS_UINT time_slice_interval) {
+  constexpr Options& set_time_slice_interval(OS_UINT time_slice_interval) {
     PW_DASSERT(time_slice_interval <= 255);
     time_slice_interval_ = time_slice_interval;
     return *this;
@@ -78,7 +78,7 @@
 
   // Set the pre-allocated context (all memory needed to run a thread), see the
   // pw::thread::embos::Context for more detail.
-  constexpr Options set_context(Context& context) {
+  constexpr Options& set_context(Context& context) {
     context_ = &context;
     return *this;
   }
diff --git a/pw_thread_freertos/public/pw_thread_freertos/options.h b/pw_thread_freertos/public/pw_thread_freertos/options.h
index 7a70d12..f97c586 100644
--- a/pw_thread_freertos/public/pw_thread_freertos/options.h
+++ b/pw_thread_freertos/public/pw_thread_freertos/options.h
@@ -49,7 +49,7 @@
   // Sets the name for the FreeRTOS task, note that this will be truncated
   // based on configMAX_TASK_NAME_LEN.
   // This is deep copied by FreeRTOS into the task's task control block (TCB).
-  constexpr Options set_name(const char* name) {
+  constexpr Options& set_name(const char* name) {
     name_ = name;
     return *this;
   }
@@ -57,7 +57,7 @@
   // Sets the priority for the FreeRTOS task. This must be a value between
   // tskIDLE_PRIORITY or 0 to configMAX_PRIORITIES - 1. Higher priority values
   // have a higher priority.
-  constexpr Options set_priority(UBaseType_t priority) {
+  constexpr Options& set_priority(UBaseType_t priority) {
     priority_ = priority;
     return *this;
   }
@@ -66,7 +66,7 @@
   // Set the stack size of dynamic thread allocations.
   //
   // Precondition: size_words must be >= configMINIMAL_STACK_SIZE
-  constexpr Options set_stack_size(size_t size_words) {
+  constexpr Options& set_stack_size(size_t size_words) {
     PW_DASSERT(size_words >= config::kMinimumStackSizeWords);
     stack_size_words_ = size_words;
     return *this;
@@ -75,7 +75,7 @@
 
   // Set the pre-allocated context (all memory needed to run a thread), see the
   // pw::thread::freertos::StaticContext for more detail.
-  constexpr Options set_static_context(StaticContext& context) {
+  constexpr Options& set_static_context(StaticContext& context) {
     context_ = &context;
     return *this;
   }
diff --git a/pw_thread_threadx/public/pw_thread_threadx/options.h b/pw_thread_threadx/public/pw_thread_threadx/options.h
index cdd3414..7c130a1 100644
--- a/pw_thread_threadx/public/pw_thread_threadx/options.h
+++ b/pw_thread_threadx/public/pw_thread_threadx/options.h
@@ -53,7 +53,7 @@
   // Sets the name for the ThreadX thread, note that this will be deep copied
   // into the context and may be truncated based on
   // PW_THREAD_THREADX_CONFIG_MAX_THREAD_NAME_LEN.
-  constexpr Options set_name(const char* name) {
+  constexpr Options& set_name(const char* name) {
     name_ = name;
     return *this;
   }
@@ -61,7 +61,7 @@
   // Sets the priority for the ThreadX thread from 0 through 31, where a value
   // of 0 represents the highest priority, see ThreadX tx_thread_create for
   // more detail.
-  constexpr Options set_priority(UINT priority) {
+  constexpr Options& set_priority(UINT priority) {
     PW_DASSERT(priority <= PW_THREAD_THREADX_CONFIG_MIN_PRIORITY);
     priority_ = priority;
     return *this;
@@ -86,7 +86,7 @@
   // initial threshold.
   //
   // Precondition: preemption_threshold <= priority
-  constexpr Options set_preemption_threshold(UINT preemption_threshold) {
+  constexpr Options& set_preemption_threshold(UINT preemption_threshold) {
     PW_DASSERT(preemption_threshold < PW_THREAD_THREADX_CONFIG_MIN_PRIORITY);
     possible_preemption_threshold_ = preemption_threshold;
     return *this;
@@ -103,14 +103,14 @@
   //
   // Using time slicing results in a slight amount of system overhead, threads
   // with a unique priority should consider TX_NO_TIME_SLICE.
-  constexpr Options set_time_slice_interval(ULONG time_slice_interval) {
+  constexpr Options& set_time_slice_interval(ULONG time_slice_interval) {
     time_slice_interval_ = time_slice_interval;
     return *this;
   }
 
   // Set the pre-allocated context (all memory needed to run a thread), see the
   // pw::thread::threadx::Context for more detail.
-  constexpr Options set_context(Context& context) {
+  constexpr Options& set_context(Context& context) {
     context_ = &context;
     return *this;
   }