From f0f18ddd7c30020aa2c8b40b8cf1abf7150c124b Mon Sep 17 00:00:00 2001
From: Terraneo Federico <fede.tft@miosix.org>
Date: Sat, 29 Apr 2023 11:41:00 +0200
Subject: [PATCH] Encapsulate thread pointer in flags

---
 miosix/kernel/kernel.cpp | 3 +--
 miosix/kernel/kernel.h   | 7 +++++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/miosix/kernel/kernel.cpp b/miosix/kernel/kernel.cpp
index af51b9e9..2800811c 100755
--- a/miosix/kernel/kernel.cpp
+++ b/miosix/kernel/kernel.cpp
@@ -717,7 +717,7 @@ void Thread::setupUserspaceContext(unsigned int entry, unsigned int *gotBase,
 #endif //WITH_PROCESSES
 
 Thread::Thread(unsigned int *watermark, unsigned int stacksize,
-               bool defaultReent) : schedData(), flags(), savedPriority(0),
+               bool defaultReent) : schedData(), flags(this), savedPriority(0),
                mutexLocked(nullptr), mutexWaiting(nullptr), watermark(watermark),
                ctxsave(), stacksize(stacksize)
 {
@@ -782,7 +782,6 @@ Thread *Thread::doCreate(void*(*startfunc)(void*) , unsigned int stacksize,
             reinterpret_cast<unsigned int*>(thread),argv);
 
     if((options & JOINABLE)==0) thread->flags.IRQsetDetached();
-    thread->flags.t = thread;
     return thread;
 }
 
diff --git a/miosix/kernel/kernel.h b/miosix/kernel/kernel.h
index 876abdc9..1f1abb24 100755
--- a/miosix/kernel/kernel.h
+++ b/miosix/kernel/kernel.h
@@ -926,7 +926,7 @@ private:
         /**
          * Constructor, sets flags to default.
          */
-        ThreadFlags() : flags(0) {}
+        ThreadFlags(Thread *t) : t(t), flags(0) {}
 
         /**
          * Set the wait flag of the thread.
@@ -1034,7 +1034,9 @@ private:
          */
         bool isInUserspace() const { return flags & USERSPACE; }
 
-        Thread* t;
+        //Unwanted methods
+        ThreadFlags(const ThreadFlags& p) = delete;
+        ThreadFlags& operator = (const ThreadFlags& p) = delete;
 
     private:
         ///\internal Thread is in the wait status. A call to wakeup will change
@@ -1061,6 +1063,7 @@ private:
         ///\internal Thread is running in userspace
         static const unsigned int USERSPACE=1<<6;
 
+        Thread* t; ///<\internal pointer to the thread to which the flags belong
         unsigned char flags;///<\internal flags are stored here
     };
     
-- 
GitLab