@@ -1437,7 +1437,7 @@ void reopen_json_log() {
14371437 }
14381438}
14391439
1440- void generic_event_loop (WorkerType worker_type, bool init_and_listen_rpc_port) noexcept {
1440+ void generic_event_loop (WorkerType worker_type, bool init_and_listen_rpc_port, bool invoke_dummy_self_rpc_request ) noexcept {
14411441 if (master_flag && logname_pattern != nullptr ) {
14421442 reopen_logs ();
14431443 reopen_json_log ();
@@ -1468,24 +1468,24 @@ void generic_event_loop(WorkerType worker_type, bool init_and_listen_rpc_port) n
14681468 if (rpc_sfd >= 0 ) {
14691469 init_listening_connection (rpc_sfd, &ct_php_engine_rpc_server, &rpc_methods);
14701470 }
1471+ }
14711472
1472- if (run_once ) {
1473- int pipe_fd[2 ];
1474- pipe (pipe_fd);
1473+ if (invoke_dummy_self_rpc_request ) {
1474+ int pipe_fd[2 ];
1475+ pipe (pipe_fd);
14751476
1476- int read_fd = pipe_fd[0 ];
1477- int write_fd = pipe_fd[1 ];
1477+ int read_fd = pipe_fd[0 ];
1478+ int write_fd = pipe_fd[1 ];
14781479
1479- rpc_client_methods.rpc_ready = nullptr ;
1480- epoll_insert_pipe (pipe_for_read, read_fd, &ct_php_rpc_client, &rpc_client_methods);
1480+ rpc_client_methods.rpc_ready = nullptr ;
1481+ epoll_insert_pipe (pipe_for_read, read_fd, &ct_php_rpc_client, &rpc_client_methods);
14811482
1482- int q[6 ];
1483- int qsize = 6 * sizeof (int );
1484- q[2 ] = TL_RPC_INVOKE_REQ;
1485- for (int i = 0 ; i < run_once_count; i++) {
1486- prepare_rpc_query_raw (i, q, qsize, crc32c_partial);
1487- assert (write (write_fd, q, (size_t )qsize) == qsize);
1488- }
1483+ int q[6 ];
1484+ int qsize = 6 * sizeof (int );
1485+ q[2 ] = TL_RPC_INVOKE_REQ;
1486+ for (int i = 0 ; i < run_once_count; i++) {
1487+ prepare_rpc_query_raw (i, q, qsize, crc32c_partial);
1488+ assert (write (write_fd, q, (size_t )qsize) == qsize);
14891489 }
14901490 }
14911491
@@ -1633,7 +1633,7 @@ void start_server() {
16331633 }
16341634
16351635 worker_global_init (worker_type);
1636- generic_event_loop (worker_type, !master_flag);
1636+ generic_event_loop (worker_type, !master_flag, run_once || run_once_prefork_mode );
16371637}
16381638
16391639void set_instance_cache_memory_limit (size_t limit);
@@ -2454,9 +2454,14 @@ int run_main(int argc, char **argv, php_mode mode) {
24542454 parse_main_args (argc, argv);
24552455
24562456 if (run_once) {
2457- master_flag = 0 ;
2458- rpc_port = -1 ;
2459- setvbuf (stdout, nullptr , _IONBF, 0 );
2457+ if (master_flag) {
2458+ kprintf (" running in special run once pre-fork mode\n " );
2459+ run_once_prefork_mode = true ;
2460+ } else {
2461+ master_flag = 0 ;
2462+ rpc_port = -1 ;
2463+ setvbuf (stdout, nullptr , _IONBF, 0 );
2464+ }
24602465 }
24612466
24622467 if (!master_flag && vk::singleton<HttpServerContext>::get ().http_server_enabled ()) {
0 commit comments