|
|
|
/*
|
|
|
|
* Copyright 2021 Google LLC
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "render_context.h"
|
|
|
|
#include "render_server.h"
|
|
|
|
|
|
|
|
/* The main process is the server process. It enters render_server_main and
|
|
|
|
* never returns except on fatal errors.
|
|
|
|
*
|
|
|
|
* The server process supports only one connection currently. It creates a
|
|
|
|
* render_client to manage the connection. There is a client process at the
|
|
|
|
* other end of the connection. When the client process requests a new
|
|
|
|
* context to be created, the server process creates a worker. It also sets
|
|
|
|
* up a socket pair, with one end owned by the worker and the other end sent
|
|
|
|
* to and owned by the client process.
|
|
|
|
*
|
|
|
|
* A worker can be a subprocess forked from the server process, or a thread
|
|
|
|
* created by the server process. When a worker is a subprocess, the
|
|
|
|
* subprocess returns from render_server_main and enters render_context_main.
|
|
|
|
*
|
|
|
|
* When a worker is a thread, the thread enters render_context_main directly
|
|
|
|
* from its start function. In this case, render_context_main must be
|
|
|
|
* thread-safe.
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
main(int argc, char **argv)
|
|
|
|
{
|
|
|
|
render_log_init();
|
|
|
|
|
|
|
|
struct render_context_args ctx_args;
|
|
|
|
bool ok = render_server_main(argc, argv, &ctx_args);
|
|
|
|
|
|
|
|
/* this is a subprocess */
|
|
|
|
if (ok && ctx_args.valid)
|
|
|
|
ok = render_context_main(&ctx_args);
|
|
|
|
|
|
|
|
return ok ? 0 : -1;
|
|
|
|
}
|