From f6546e87cb32c1b9a6be750ec9e828331c43a7fa Mon Sep 17 00:00:00 2001 From: rhinoxi Date: Mon, 7 Jul 2025 16:20:28 +0800 Subject: [PATCH] fix broadcastProgress goroutine leak issue --- README.md | 8 +++++++- uploader.go | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3ee7f60..3299b42 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,11 @@ func main() { upload, _ := tus.NewUploadFromFile(f) // create the uploader. - uploader, _ := client.CreateUpload(upload) + uploader, err := client.CreateUpload(upload) + if err != nil { + panic(err) + } + defer uploader.Close() // start the uploading process. uploader.Upload() @@ -106,8 +110,10 @@ func main() { fmt.Println("Error", err) fmt.Println("Trying again in 10 seg") time.Sleep(time.Second * 10) + uploader.Close() continue } + uploader.Close() break } // If after all attemps there's an error panic! diff --git a/uploader.go b/uploader.go index 8e39cd7..6d5bf3c 100644 --- a/uploader.go +++ b/uploader.go @@ -86,6 +86,11 @@ func (u *Uploader) UploadChunck() error { return nil } +// Close close the notifyChan so that broadcastProgress goroutine can exit +func (u *Uploader) Close() { + close(u.notifyChan) +} + // Waits for a signal to broadcast to all subscribers func (u *Uploader) broadcastProgress() { for _ = range u.notifyChan {