void Thread::run (void)
{
- m_status = THREADSTATUS_RUNNING;
+ setStatus(THREADSTATUS_RUNNING);
bool initOk = false;
// Reserve at least two messages for each operation
m_operations[operationNdx]->execute(*this);
deinit();
- m_status = THREADSTATUS_READY;
+ setStatus(THREADSTATUS_READY);
}
catch (const tcu::NotSupportedError& e)
{
newMessage() << "tcu::NotSupportedError '" << e.what() << "'" << Message::End;
deinit();
- m_status = (initOk ? THREADSTATUS_NOT_SUPPORTED : THREADSTATUS_INIT_FAILED);
+ setStatus(initOk ? THREADSTATUS_NOT_SUPPORTED : THREADSTATUS_INIT_FAILED);
}
catch (const tcu::Exception& e)
{
newMessage() << "tcu::Exception '" << e.what() << "'" << Message::End;
deinit();
- m_status = (initOk ? THREADSTATUS_FAILED : THREADSTATUS_INIT_FAILED);
+ setStatus(initOk ? THREADSTATUS_FAILED : THREADSTATUS_INIT_FAILED);
}
catch (const std::exception& error)
{
newMessage() << "std::exception '" << error.what() << "'" << Message::End;
deinit();
- m_status = (initOk ? THREADSTATUS_FAILED : THREADSTATUS_INIT_FAILED);
+ setStatus(initOk ? THREADSTATUS_FAILED : THREADSTATUS_INIT_FAILED);
}
catch (...)
{
newMessage() << "Unkown exception" << Message::End;
deinit();
- m_status = (initOk ? THREADSTATUS_FAILED : THREADSTATUS_INIT_FAILED);
+ setStatus(initOk ? THREADSTATUS_FAILED : THREADSTATUS_INIT_FAILED);
}
}
deUint8* getDummyData (size_t size); //!< Return data pointer that contains at least size bytes. Valid until next call
- ThreadStatus getStatus (void) const { return m_status; }
+ ThreadStatus getStatus (void) const { de::ScopedLock lock(m_statusLock); return m_status; }
+ void setStatus (ThreadStatus status) { de::ScopedLock lock(m_statusLock); m_status = status; }
MessageBuilder newMessage (void) { return MessageBuilder(*this); }
de::Random& getRandom (void) { return m_random; }
mutable de::Mutex m_messageLock;
std::vector<Message> m_messages;
+ mutable de::Mutex m_statusLock;
ThreadStatus m_status;
std::vector<deUint8> m_dummyData;