Просмотр исходного кода

fix: properly cleanup workersReadyWG (#184)

Kévin Dunglas 1 год назад
Родитель
Сommit
307c5fa865
2 измененных файлов с 17 добавлено и 7 удалено
  1. 5 5
      frankenphp.go
  2. 12 2
      worker.go

+ 5 - 5
frankenphp.go

@@ -282,11 +282,8 @@ func Init(options ...Option) error {
 		return MainThreadCreationError
 	}
 
-	for _, w := range opt.workers {
-		// TODO: start all the worker in parallell to reduce the boot time
-		if err := startWorkers(w.fileName, w.num); err != nil {
-			return err
-		}
+	if err := initWorkers(opt.workers); err != nil {
+		return err
 	}
 
 	logger.Debug("FrankenPHP started")
@@ -301,6 +298,9 @@ func Shutdown() {
 	shutdownWG.Wait()
 	requestChan = nil
 
+	// Always reset the WaitGroup to ensure we're in a clean state
+	workersReadyWG = sync.WaitGroup{}
+
 	logger.Debug("FrankenPHP shut down")
 }
 

+ 12 - 2
worker.go

@@ -17,9 +17,19 @@ import (
 var (
 	workersRequestChans sync.Map // map[fileName]chan *http.Request
 	workersReadyWG      sync.WaitGroup
-	workersWG           sync.WaitGroup
 )
 
+// TODO: start all the worker in parallell to reduce the boot time
+func initWorkers(opt []workerOpt) error {
+	for _, w := range opt {
+		if err := startWorkers(w.fileName, w.num); err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
 func startWorkers(fileName string, nbWorkers int) error {
 	absFileName, err := filepath.Abs(fileName)
 	if err != nil {
@@ -35,7 +45,7 @@ func startWorkers(fileName string, nbWorkers int) error {
 	workersReadyWG.Add(nbWorkers)
 
 	var (
-		m      sync.Mutex
+		m      sync.RWMutex
 		errors []error
 	)