1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Plugin Scanning: Fix thread sanitizer issues in the AudioPluginHost

This commit is contained in:
reuk 2022-01-18 16:50:16 +00:00
parent 01e71bc351
commit 093dbc7df1
No known key found for this signature in database
GPG key ID: FCB43929F012EE5C
5 changed files with 109 additions and 48 deletions

View file

@ -23,6 +23,23 @@
namespace juce
{
// Using Random::getSystemRandom() can be a bit dangerous in multithreaded contexts!
class LockedRandom
{
public:
int nextInt()
{
const ScopedLock lock (mutex);
return random.nextInt();
}
private:
CriticalSection mutex;
Random random;
};
static LockedRandom lockedRandom;
static File createTempFile (const File& parentDirectory, String name,
const String& suffix, int optionFlags)
{
@ -34,7 +51,7 @@ static File createTempFile (const File& parentDirectory, String name,
TemporaryFile::TemporaryFile (const String& suffix, const int optionFlags)
: temporaryFile (createTempFile (File::getSpecialLocation (File::tempDirectory),
"temp_" + String::toHexString (Random::getSystemRandom().nextInt()),
"temp_" + String::toHexString (lockedRandom.nextInt()),
suffix, optionFlags)),
targetFile()
{
@ -43,7 +60,7 @@ TemporaryFile::TemporaryFile (const String& suffix, const int optionFlags)
TemporaryFile::TemporaryFile (const File& target, const int optionFlags)
: temporaryFile (createTempFile (target.getParentDirectory(),
target.getFileNameWithoutExtension()
+ "_temp" + String::toHexString (Random::getSystemRandom().nextInt()),
+ "_temp" + String::toHexString (lockedRandom.nextInt()),
target.getFileExtension(), optionFlags)),
targetFile (target)
{