Skip to content

Commit 09eef44

Browse files
committed
don't register Producers after shutdown
1 parent 0a88197 commit 09eef44

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

sdk/metric/manual_reader.go

+7
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ type manualReader struct {
3232
shutdownOnce sync.Once
3333

3434
mu sync.Mutex
35+
isShutdown bool
3536
externalProducers atomic.Value
3637

3738
temporalitySelector TemporalitySelector
@@ -67,6 +68,9 @@ func (mr *manualReader) register(p sdkProducer) {
6768
func (mr *manualReader) RegisterProducer(p Producer) {
6869
mr.mu.Lock()
6970
defer mr.mu.Unlock()
71+
if mr.isShutdown {
72+
return
73+
}
7074
currentProducers := mr.externalProducers.Load().([]Producer)
7175
newProducers := []Producer{}
7276
newProducers = append(newProducers, currentProducers...)
@@ -97,6 +101,9 @@ func (mr *manualReader) Shutdown(context.Context) error {
97101
mr.sdkProducer.Store(produceHolder{
98102
produce: shutdownProducer{}.produce,
99103
})
104+
mr.mu.Lock()
105+
defer mr.mu.Unlock()
106+
mr.isShutdown = true
100107
// release references to Producer(s)
101108
mr.externalProducers.Store([]Producer{})
102109
err = nil

sdk/metric/periodic_reader.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ type periodicReader struct {
130130
sdkProducer atomic.Value
131131

132132
mu sync.Mutex
133+
isShutdown bool
133134
externalProducers atomic.Value
134135

135136
timeout time.Duration
@@ -182,6 +183,9 @@ func (r *periodicReader) register(p sdkProducer) {
182183
func (r *periodicReader) RegisterProducer(p Producer) {
183184
r.mu.Lock()
184185
defer r.mu.Unlock()
186+
if r.isShutdown {
187+
return
188+
}
185189
currentProducers := r.externalProducers.Load().([]Producer)
186190
newProducers := []Producer{}
187191
newProducers = append(newProducers, currentProducers...)
@@ -301,13 +305,16 @@ func (r *periodicReader) Shutdown(ctx context.Context) error {
301305
}
302306
}
303307

304-
// release references to Producer(s)
305-
r.externalProducers.Store([]Producer{})
306-
307308
sErr := r.exporter.Shutdown(ctx)
308309
if err == nil || err == ErrReaderShutdown {
309310
err = sErr
310311
}
312+
313+
r.mu.Lock()
314+
defer r.mu.Unlock()
315+
r.isShutdown = true
316+
// release references to Producer(s)
317+
r.externalProducers.Store([]Producer{})
311318
})
312319
return err
313320
}

0 commit comments

Comments
 (0)