@@ -150,9 +150,16 @@ func (e *eventExecutor) GetClientRegistry(client string) scopedCallback {
150150// emitOnRegistration fulfils the spec requirement to fire events if the
151151// event type and the state of the associated provider are compatible.
152152func (e * eventExecutor ) emitOnRegistration (domain string , providerReference providerReference , eventType EventType , callback EventCallback ) {
153- state , ok := e .loadState (domain )
154- if ! ok {
155- return
153+ var state State
154+ // state-managing providers own their state; read directly
155+ if smp , ok := providerReference .featureProvider .(StateManagingProvider ); ok {
156+ state = smp .State ()
157+ } else {
158+ var ok bool
159+ state , ok = e .loadState (domain )
160+ if ! ok {
161+ return
162+ }
156163 }
157164
158165 var message string
@@ -185,6 +192,20 @@ func (e *eventExecutor) loadState(domain string) (State, bool) {
185192}
186193
187194func (e * eventExecutor ) State (domain string ) State {
195+ e .mu .Lock ()
196+ defer e .mu .Unlock ()
197+
198+ // find the provider reference for this domain
199+ ref , ok := e .namedProviderReference [domain ]
200+ if ! ok {
201+ ref = e .defaultProviderReference
202+ }
203+
204+ // state-managing providers own their state; read directly
205+ if smp , ok := ref .featureProvider .(StateManagingProvider ); ok {
206+ return smp .State ()
207+ }
208+
188209 state , _ := e .loadState (domain )
189210 return state
190211}
@@ -297,6 +318,8 @@ func (e *eventExecutor) triggerEvent(event Event, handler FeatureProvider) {
297318 e .mu .Lock ()
298319 defer e .mu .Unlock ()
299320
321+ _ , delegateManagesState := handler .(StateManagingProvider )
322+
300323 // first run API handlers
301324 for _ , c := range e .apiRegistry [event .EventType ] {
302325 e .executeHandler (* c , event )
@@ -308,7 +331,10 @@ func (e *eventExecutor) triggerEvent(event Event, handler FeatureProvider) {
308331 continue
309332 }
310333
311- e .states .Store (domain , stateFromEvent (event ))
334+ // state-managing providers own their state; skip SDK-side writes
335+ if ! delegateManagesState {
336+ e .states .Store (domain , stateFromEvent (event ))
337+ }
312338 for _ , c := range e .scopedRegistry [domain ].callbacks [event .EventType ] {
313339 e .executeHandler (* c , event )
314340 }
@@ -319,7 +345,10 @@ func (e *eventExecutor) triggerEvent(event Event, handler FeatureProvider) {
319345 }
320346
321347 // handling the default provider
322- e .states .Store (defaultDomain , stateFromEvent (event ))
348+ // state-managing providers own their state; skip SDK-side writes
349+ if ! delegateManagesState {
350+ e .states .Store (defaultDomain , stateFromEvent (event ))
351+ }
323352 // invoke default provider bound (no provider associated) handlers by filtering
324353 for domain , registry := range e .scopedRegistry {
325354 if _ , ok := e .namedProviderReference [domain ]; ok {
0 commit comments