fix: using volatile for double checked locking

closes: #40630

Signed-off-by: Steve Hawkins <shawkins@redhat.com>
This commit is contained in:
Steven Hawkins 2025-08-22 12:01:28 -04:00 committed by GitHub
parent 7446299c23
commit 7767717d17
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 7 additions and 10 deletions

View File

@ -26,7 +26,7 @@ public class WebAuthnCredentialProviderFactory implements CredentialProviderFact
public static final String PROVIDER_ID = "keycloak-webauthn";
private ObjectConverter converter;
private volatile ObjectConverter converter;
@Override
public CredentialProvider create(KeycloakSession session) {

View File

@ -31,7 +31,7 @@ public class WebAuthnPasswordlessCredentialProviderFactory implements Credential
public static final String PROVIDER_ID = "keycloak-webauthn-passwordless";
private ObjectConverter converter;
private volatile ObjectConverter converter;
@Override
public CredentialProvider create(KeycloakSession session) {

View File

@ -61,7 +61,6 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
@ -72,9 +71,7 @@ public class WelcomeResource {
protected static final Logger logger = Logger.getLogger(WelcomeResource.class);
private static final String KEYCLOAK_STATE_CHECKER = "WELCOME_STATE_CHECKER";
private AtomicBoolean shouldBootstrap;
private volatile Boolean shouldBootstrap;
@Context
KeycloakSession session;
@ -144,7 +141,7 @@ public class WelcomeResource {
expireCsrfCookie();
shouldBootstrap.set(false);
shouldBootstrap = false;
ServicesLogger.LOGGER.createdTemporaryAdminUser(username);
return createWelcomePage("User created", null);
}
@ -262,11 +259,11 @@ public class WelcomeResource {
if (shouldBootstrap == null) {
synchronized (this) {
if (shouldBootstrap == null) {
shouldBootstrap = new AtomicBoolean(new ApplianceBootstrap(session).isNoMasterUser());
shouldBootstrap = new ApplianceBootstrap(session).isNoMasterUser();
}
}
}
return shouldBootstrap.get();
return shouldBootstrap;
}
public static boolean isLocal(KeycloakSession session) {

View File

@ -10,7 +10,7 @@ import java.util.concurrent.ConcurrentHashMap;
public class DefaultFreeMarkerProviderFactory implements FreeMarkerProviderFactory {
private DefaultFreeMarkerProvider provider;
private volatile DefaultFreeMarkerProvider provider;
private ConcurrentHashMap<String, Template> cache;
private KeycloakSanitizerMethod kcSanitizeMethod;