fix: prevent panic when restarting crashed worker (#49)

This commit is contained in:
Kévin Dunglas
2022-10-21 14:43:16 +02:00
committed by GitHub
parent 0f65e421e4
commit 26edeb76e4
3 changed files with 18 additions and 0 deletions

9
testdata/die.php vendored Normal file
View File

@@ -0,0 +1,9 @@
<?php
do {
$ok = frankenphp_handle_request(function () use ($i): void {
echo 'Hello, world';
});
die('Hello');
} while ($ok);

View File

@@ -74,6 +74,7 @@ func startWorkers(fileName string, nbWorkers int) error {
// TODO: make the max restart configurable
if _, ok := workersRequestChans.Load(absFileName); ok {
workersReadyWG.Add(1)
l.Error("unexpected termination, restarting", zap.String("worker", absFileName))
} else {
break

View File

@@ -41,6 +41,14 @@ func TestWorker(t *testing.T) {
}, &testOptions{workerScript: "worker.php", nbWorkers: 1, nbParrallelRequests: 1})
}
func TestWorkerDie(t *testing.T) {
runTest(t, func(handler func(http.ResponseWriter, *http.Request), _ *httptest.Server, i int) {
req := httptest.NewRequest("GET", "http://example.com/die.php", nil)
w := httptest.NewRecorder()
handler(w, req)
}, &testOptions{workerScript: "die.php", nbWorkers: 1, nbParrallelRequests: 10})
}
func ExampleServeHTTP_workers() {
if err := frankenphp.Init(
frankenphp.WithWorkers("worker1.php", 4),