55import dev .openfeature .sdk .exceptions .GeneralError ;
66import dev .openfeature .sdk .exceptions .OpenFeatureError ;
77import dev .openfeature .sdk .exceptions .ProviderNotReadyError ;
8- import dev .openfeature .sdk .internal .AutoCloseableLock ;
9- import dev .openfeature .sdk .internal .AutoCloseableReentrantReadWriteLock ;
108import dev .openfeature .sdk .internal .ObjectUtils ;
119import edu .umd .cs .findbugs .annotations .SuppressFBWarnings ;
1210import java .util .ArrayList ;
1614import java .util .List ;
1715import java .util .Map ;
1816import java .util .Objects ;
17+ import java .util .concurrent .ConcurrentLinkedQueue ;
1918import java .util .concurrent .atomic .AtomicReference ;
2019import java .util .function .Consumer ;
2120import lombok .Getter ;
@@ -48,9 +47,8 @@ public class OpenFeatureClient implements Client {
4847 @ Getter
4948 private final String version ;
5049
51- private final List <Hook > clientHooks ;
50+ private final ConcurrentLinkedQueue <Hook > clientHooks ;
5251 private final HookSupport hookSupport ;
53- AutoCloseableReentrantReadWriteLock hooksLock = new AutoCloseableReentrantReadWriteLock ();
5452 private final AtomicReference <EvaluationContext > evaluationContext = new AtomicReference <>();
5553
5654 /**
@@ -69,7 +67,7 @@ public OpenFeatureClient(OpenFeatureAPI openFeatureAPI, String domain, String ve
6967 this .openfeatureApi = openFeatureAPI ;
7068 this .domain = domain ;
7169 this .version = version ;
72- this .clientHooks = new ArrayList <>();
70+ this .clientHooks = new ConcurrentLinkedQueue <>();
7371 this .hookSupport = new HookSupport ();
7472 }
7573
@@ -126,9 +124,7 @@ public void track(String trackingEventName, EvaluationContext context, TrackingE
126124 */
127125 @ Override
128126 public OpenFeatureClient addHooks (Hook ... hooks ) {
129- try (AutoCloseableLock ignored = this .hooksLock .writeLockAutoCloseable ()) {
130- this .clientHooks .addAll (Arrays .asList (hooks ));
131- }
127+ this .clientHooks .addAll (Arrays .asList (hooks ));
132128 return this ;
133129 }
134130
@@ -137,13 +133,7 @@ public OpenFeatureClient addHooks(Hook... hooks) {
137133 */
138134 @ Override
139135 public List <Hook > getHooks () {
140- try (AutoCloseableLock ignored = this .hooksLock .readLockAutoCloseable ()) {
141- if (this .clientHooks .isEmpty ()) {
142- return Collections .emptyList ();
143- } else {
144- return new ArrayList <>(this .clientHooks );
145- }
146- }
136+ return new ArrayList <>(this .clientHooks );
147137 }
148138
149139 /**
@@ -183,10 +173,8 @@ private <T> FlagEvaluationDetails<T> evaluateFlag(
183173 var provider = stateManager .getProvider ();
184174 var state = stateManager .getState ();
185175
186- try (AutoCloseableLock ignored = this .hooksLock .readLockAutoCloseable ()) {
187- mergedHooks = ObjectUtils .merge (
188- provider .getProviderHooks (), flagOptions .getHooks (), clientHooks , openfeatureApi .getHooks ());
189- }
176+ mergedHooks = ObjectUtils .merge (
177+ provider .getProviderHooks (), flagOptions .getHooks (), clientHooks , openfeatureApi .getMutableHooks ());
190178
191179 var mergedCtx = hookSupport .beforeHooks (
192180 type ,
0 commit comments