diff --git a/miosix/kernel/kernel.cpp b/miosix/kernel/kernel.cpp index af51b9e918197b21208ccae72a2346c381bc301e..2800811c271b881a56a9626f57285dae74bc42c2 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 876abdc9efd8b7ab6abe5f7c45868e7b7dafdbbf..1f1abb248267759c92c42e272d75abe5c7f4c858 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 };