From 2485ea0ed1b22d4eec9a6df6050a6b99bec7bb35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=2EVouillon?= Date: Fri, 20 Dec 2019 11:21:51 +0100 Subject: [PATCH] No longer run initialization code within Lwt_main.run We are dynamically loading code that may call Lwt_main.run, but this function cannot be nested in Lwt 5. --- src/server/ocsigen_server.ml | 40 ++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/src/server/ocsigen_server.ml b/src/server/ocsigen_server.ml index c590dcd27..cd8b24ad4 100644 --- a/src/server/ocsigen_server.ml +++ b/src/server/ocsigen_server.ml @@ -1217,24 +1217,28 @@ let start_server () = in let run (user, group) (_, ports, sslports) (minthreads, maxthreads) s = - Ocsigen_messages.open_files ~user ~group () >>= fun () -> - let wait_end_init, wait_end_init_awakener = wait () in (* Listening on all ports: *) - Lwt_list.fold_left_s - (fun a i -> - listen false i wait_end_init >>= fun l -> - Lwt.return (l @ a)) - [] ports >>= fun l -> - sockets := l; - - Lwt_list.fold_left_s - (fun a i -> - listen true i wait_end_init >>= fun l -> - Lwt.return (l @ a)) - [] sslports >>= fun l -> - sslsockets := l; + let () = + Lwt_main.run + (Ocsigen_messages.open_files ~user ~group () >>= fun () -> + + Lwt_list.fold_left_s + (fun a i -> + listen false i wait_end_init >>= fun l -> + Lwt.return (l @ a)) + [] ports >>= fun l -> + sockets := l; + + Lwt_list.fold_left_s + (fun a i -> + listen true i wait_end_init >>= fun l -> + Lwt.return (l @ a)) + [] sslports >>= fun l -> + sslsockets := l; + Lwt.return_unit) + in begin match ports with | (_, p)::_ -> Ocsigen_config.set_default_port p @@ -1385,7 +1389,7 @@ let start_server () = Lwt_log.ign_notice ~section "Ocsigen has been launched \ (initialisations ok)"; - fst (Lwt.wait ()) + Lwt_main.run @@ fst (Lwt.wait ()) in @@ -1466,7 +1470,7 @@ let start_server () = let pid = Lwt_unix.fork () in if pid = 0 then - Lwt_main.run (run user_info sslinfo threadinfo h) + run user_info sslinfo threadinfo h else begin Ocsigen_messages.console (fun () -> "Process "^(string_of_int pid)^" detached"); @@ -1474,7 +1478,7 @@ let start_server () = end else begin write_pid (Unix.getpid ()); - Lwt_main.run (run user_info sslinfo threadinfo h) + run user_info sslinfo threadinfo h end | _ -> () (* Multiple servers not supported any more *)