PassRefPtr<HRTFDatabaseLoader> HRTFDatabaseLoader::createAndLoadAsynchronouslyIfNecessary(float sampleRate)
{
    ASSERT(isMainThread());

    RefPtr<HRTFDatabaseLoader> loader = loaderMap().get(sampleRate);
    if (loader) {
        ASSERT(sampleRate == loader->databaseSampleRate());
        return loader.release();
    }

    loader = adoptRef(new HRTFDatabaseLoader(sampleRate));
    loaderMap().add(sampleRate, loader.get());
    loader->loadAsynchronously();
    return loader.release();
}
HRTFDatabaseLoader::~HRTFDatabaseLoader()
{
    ASSERT(isMainThread());

    waitForLoaderThreadCompletion();
    m_hrtfDatabase = nullptr;

    // Remove ourself from the map.
    loaderMap().remove(m_databaseSampleRate);
}
HRTFDatabaseLoader::~HRTFDatabaseLoader()
{
    ASSERT(isMainThread());
    ASSERT(!m_thread);
    loaderMap().remove(m_databaseSampleRate);
}