Browse Source

修复 recover 的使用 bug

Signed-off-by: allan716 <[email protected]>
allan716 3 years ago
parent
commit
85c881f809
2 changed files with 21 additions and 12 deletions
  1. 6 3
      TestCode/test_context.go
  2. 15 9
      internal/pkg/downloader/downloader.go

+ 6 - 3
TestCode/test_context.go

@@ -24,9 +24,12 @@ func DoThings(ctx context.Context) error {
 		panicChan := make(chan interface{}, 1)
 
 		go func() {
-			if p := recover(); p != nil {
-				panicChan <- p
-			}
+			defer func() {
+				if p := recover(); p != nil {
+					panicChan <- p
+				}
+			}()
+
 			// 匹配对应的 Eps 去处理
 			done <- baseHardWork(i)
 		}()

+ 15 - 9
internal/pkg/downloader/downloader.go

@@ -105,9 +105,11 @@ func (d *Downloader) SupplierCheck() {
 	// 接收内部任务的 panic
 	panicChan := make(chan interface{}, 1)
 	go func() {
-		if p := recover(); p != nil {
-			panicChan <- p
-		}
+		defer func() {
+			if p := recover(); p != nil {
+				panicChan <- p
+			}
+		}()
 		// 下载前的初始化
 		d.log.Infoln("PreDownloadProcess.Init().Check().Wait()...")
 
@@ -350,9 +352,11 @@ func (d *Downloader) seriesDlFunc(ctx context.Context, job taskQueue2.OneJob, do
 		// 接收内部任务的 panic
 		panicChan := make(chan interface{}, 1)
 		go func() {
-			if p := recover(); p != nil {
-				panicChan <- p
-			}
+			defer func() {
+				if p := recover(); p != nil {
+					panicChan <- p
+				}
+			}()
 			// 匹配对应的 Eps 去处理
 			done <- d.oneVideoSelectBestSub(episodeInfo.FileFullPath, organizeSubFiles[epsKey])
 		}()
@@ -395,9 +399,11 @@ func (d *Downloader) seriesDlFunc(ctx context.Context, job taskQueue2.OneJob, do
 		}
 
 		go func() {
-			if p := recover(); p != nil {
-				panicChan <- p
-			}
+			defer func() {
+				if p := recover(); p != nil {
+					panicChan <- p
+				}
+			}()
 			// 匹配对应的 Eps 去处理
 			seasonEpsKey := my_util.GetEpisodeKeyName(episodeInfo.Season, episodeInfo.Episode)
 			done <- d.oneVideoSelectBestSub(episodeInfo.FileFullPath, fullSeasonSubDict[seasonEpsKey])