Thread::setPriority() changes the current thread's priority when the targeted thread isn't running


#1

In the message thread, I tried to change priority of a background worker thread to 0, which is not running.

 

Thread::setPriority() calls Thread::setThreadPriority() with nullptr as a handle.

https://github.com/julianstorer/JUCE/blob/633ff931d6147daa67398bbf2055449b81c9899d/modules/juce_core/threads/juce_Thread.cpp#L224

 

It leads setThreadPriority() to change the current thread's priority.

https://github.com/julianstorer/JUCE/blob/633ff931d6147daa67398bbf2055449b81c9899d/modules/juce_core/native/juce_posix_SharedCode.h#L906

https://github.com/julianstorer/JUCE/blob/633ff931d6147daa67398bbf2055449b81c9899d/modules/juce_core/native/juce_win32_Threads.cpp#L178

 

Thus the message thread's priority is changed to 0, unexpectedly.

 

I tried fixing this:

if (setThreadPriority (threadHandle, newPriority))
{
    threadPriority = newPriority;
    return true;
}
return false;

as follows:

if (isThreadRunning())
{
    if (!setThreadPriority (threadHandle, newPriority))
    {
        return false;
    }
}
threadPriority = newPriority;
return true;

and it got working as expected.


#2

Ah - interesting, thanks! Will take a look at that..