diff --git a/Foundation/include/Poco/Thread_WIN32.h b/Foundation/include/Poco/Thread_WIN32.h index ec9e43746..cc328c778 100644 --- a/Foundation/include/Poco/Thread_WIN32.h +++ b/Foundation/include/Poco/Thread_WIN32.h @@ -42,6 +42,7 @@ #include "Poco/Foundation.h" #include "Poco/Runnable.h" +#include "Poco/Mutex.h" #include "Poco/UnWindows.h" @@ -117,6 +118,7 @@ private: HANDLE _thread; int _prio; std::size_t _stackSize; + Mutex _mutex; static DWORD _currentKey; }; diff --git a/Foundation/src/Thread_WIN32.cpp b/Foundation/src/Thread_WIN32.cpp index 39452bc6c..f29d9eba2 100644 --- a/Foundation/src/Thread_WIN32.cpp +++ b/Foundation/src/Thread_WIN32.cpp @@ -83,6 +83,8 @@ void ThreadImpl::setPriorityImpl(int prio) void ThreadImpl::startImpl(Runnable& target) { + Mutex::ScopedLock lock(_mutex); + if (isRunningImpl()) throw SystemException("thread already running"); @@ -94,6 +96,8 @@ void ThreadImpl::startImpl(Runnable& target) void ThreadImpl::startImpl(Callback target, void* pData) { + Mutex::ScopedLock lock(_mutex); + if (isRunningImpl()) throw SystemException("thread already running");