Open ronykrell opened 5 years ago
There is a race condition in the getInstance method in SunshineRepository.java.
Imagine there are 2 threads - A and B - both calling getInstance() and that sInstance is null to start with
Thread A Checks if sInstance is null. Returns True
Thread B Checks if sInstance is null. Returns True
Thread A Obtains the lock and creates a new instance for sInstance. Releases lock
Thread B Remember Thread B already checked if sInstance was null earlier. Obtains the lock and creates a new instance for sInstance. Releases lock
There should be a second null check inside the synchronized block.
There is a race condition in the getInstance method in SunshineRepository.java.
Imagine there are 2 threads - A and B - both calling getInstance() and that sInstance is null to start with
Thread A Checks if sInstance is null. Returns True
Thread B Checks if sInstance is null. Returns True
Thread A Obtains the lock and creates a new instance for sInstance. Releases lock
Thread B Remember Thread B already checked if sInstance was null earlier. Obtains the lock and creates a new instance for sInstance. Releases lock
There should be a second null check inside the synchronized block.