Skip to content
This repository was archived by the owner on Nov 7, 2022. It is now read-only.

Commit a35a5fa

Browse files
committed
receiver/opencensus: fix crash on unstarted receiver.Stop
If an unstarted OpenCensus receiver was Stop()-ed, it would undefensively invoke .serverHTTP.Close() which would cause a nil dereference panic, moreover in situations where only unrelated receivers were explicitly started. Fixes #379
1 parent ad64e43 commit a35a5fa

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

receiver/opencensus/opencensus.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,9 +189,13 @@ func (ocr *Receiver) Stop() error {
189189

190190
var err = errAlreadyStopped
191191
ocr.stopOnce.Do(func() {
192-
_ = ocr.serverHTTP.Close()
192+
if ocr.serverHTTP != nil {
193+
_ = ocr.serverHTTP.Close()
194+
}
193195

194-
_ = ocr.ln.Close()
196+
if ocr.ln != nil {
197+
_ = ocr.ln.Close()
198+
}
195199

196200
// TODO: @(odeke-em) investigate what utility invoking (*grpc.Server).Stop()
197201
// gives us yet we invoke (net.Listener).Close().

receiver/opencensus/opencensus_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,3 +312,13 @@ func verifyCorsResp(t *testing.T, url string, origin string, wantStatus int, wan
312312
t.Errorf("Unexpected Access-Control-Allow-Methods: %v", gotAllowMethods)
313313
}
314314
}
315+
316+
// Issue #379: Invoking Stop on an unstarted OpenCensus receiver should never crash.
317+
func TestStopWithoutStartNeverCrashes(t *testing.T) {
318+
ocr, err := opencensus.New(":55444")
319+
if err != nil {
320+
t.Fatalf("Failed to create an OpenCensus receiver: %v", err)
321+
}
322+
// Stop it before ever invoking Start*.
323+
ocr.Stop()
324+
}

0 commit comments

Comments
 (0)