1--TEST--
2swoole_server: reload async
3--SKIPIF--
4<?php
5require __DIR__ . '/../include/skipif.inc';
6skip_if_in_valgrind();
7?>
8--FILE--
9<?php
10require __DIR__ . '/../include/bootstrap.php';
11
12$reloaded = new Swoole\Atomic;
13$workerCounter = new Swoole\Atomic;
14
15$pm = new SwooleTest\ProcessManager;
16$pm->setWaitTimeout(-1);
17$pm->parentFunc = function () use ($pm) {
18    $pm->kill();
19    echo "DONE\n";
20};
21$pm->childFunc = function () use ($pm, $reloaded, $workerCounter) {
22    $server = new Swoole\Server('127.0.0.1', $pm->getFreePort(), SWOOLE_PROCESS);
23    $server->set([
24        'log_file' => '/dev/null',
25        'worker_num' => rand(2, swoole_cpu_num() * 2),
26        'max_wait_time' => 10,
27        'reload_async' => true,
28        'enable_coroutine' => false,
29    ]);
30    $server->on('WorkerStart', function (Swoole\Server $server, int $worker_id) use ($pm, $reloaded, $workerCounter) {
31        $workerCounter->add(1);
32        if ($worker_id === 0 and $reloaded->get() != 1) {
33            $reloaded->set(1);
34            while ($workerCounter->get() < $server->setting['worker_num']) {
35                usleep(10000);
36            }
37            go(function () use ($pm) {
38                for ($n = 1; $n <= 5; $n++) {
39                    Co::sleep(0.1);
40                    echo "{$n}\n";
41                }
42                echo "RELOADED\n";
43                $pm->wakeup();
44            });
45            echo "RELOAD\n";
46            Assert::assert($server->reload());
47        }
48    });
49    $server->on('Receive', function () { });
50    $server->start();
51};
52$pm->childFirst();
53$pm->run();
54?>
55--EXPECTF--
56RELOAD
571
582
593
604
615
62RELOADED
63DONE
64