# HG changeset patch # User Paul Boddie # Date 1621377516 -7200 # Node ID bee9eb69d257b0fcc1a81b440cf1b34edf4d8bba # Parent 6da4828f7c626909fb8e709de578eb3214824f31 Introduced another convenience method for starting server threads. diff -r 6da4828f7c62 -r bee9eb69d257 libfsserver/include/fsserver/resource_server.h --- a/libfsserver/include/fsserver/resource_server.h Wed May 19 00:01:41 2021 +0200 +++ b/libfsserver/include/fsserver/resource_server.h Wed May 19 00:38:36 2021 +0200 @@ -1,7 +1,7 @@ /* * Common resource server functions. * - * Copyright (C) 2018, 2019, 2020 Paul Boddie + * Copyright (C) 2018, 2019, 2020, 2021 Paul Boddie * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -56,6 +56,8 @@ long start(); long start_thread(); + + long start_thread(l4_cap_idx_t *server); }; @@ -74,3 +76,5 @@ /* Server finalisation. */ void resource_thread_finaliser(ipc_server_config_type *config); + +// vim: tabstop=2 expandtab shiftwidth=2 diff -r 6da4828f7c62 -r bee9eb69d257 libfsserver/lib/files/opener_context_resource.cc --- a/libfsserver/lib/files/opener_context_resource.cc Wed May 19 00:01:41 2021 +0200 +++ b/libfsserver/lib/files/opener_context_resource.cc Wed May 19 00:38:36 2021 +0200 @@ -75,22 +75,13 @@ Pager *pager = _opener->open(path, flags); - /* Complete the initialisation and start a server in a new thread. - If the thread does not start, the resource should be finalised. */ - - ResourceServer server(pager); - long err = server.start_thread(); + *size = pager->get_data_size(); - if (!err) - { - /* Return the file size. */ - /* Return the server capability to the caller. */ + /* Complete the initialisation and start a server in a new thread. + If the thread does not start, the resource (including pager) will be + finalised. */ - *size = pager->get_data_size(); - *file = server.config()->server; - } - - return err; + return ResourceServer(pager).start_thread(file); } // vim: tabstop=4 expandtab shiftwidth=4 diff -r 6da4828f7c62 -r bee9eb69d257 libfsserver/lib/files/opener_resource.cc --- a/libfsserver/lib/files/opener_resource.cc Wed May 19 00:01:41 2021 +0200 +++ b/libfsserver/lib/files/opener_resource.cc Wed May 19 00:38:36 2021 +0200 @@ -63,17 +63,9 @@ OpenerContextResource *resource = new OpenerContextResource(this); /* Complete the initialisation and start a server in a new thread. - If the thread does not start, the resource should be finalised. */ - - ResourceServer server(resource); - long err = server.start_thread(); + If the thread does not start, the resource will be finalised. */ - /* Return the server capability to the caller. */ - - if (!err) - *context = server.config()->server; - - return err; + return ResourceServer(resource).start_thread(context); } // vim: tabstop=4 expandtab shiftwidth=4 diff -r 6da4828f7c62 -r bee9eb69d257 libfsserver/lib/generic/resource_server.cc --- a/libfsserver/lib/generic/resource_server.cc Wed May 19 00:01:41 2021 +0200 +++ b/libfsserver/lib/generic/resource_server.cc Wed May 19 00:38:36 2021 +0200 @@ -68,6 +68,19 @@ return resource_start_config(_config, _resource); } +/* A convenience method starting a thread and providing the server + capability. */ + +long ResourceServer::start_thread(l4_cap_idx_t *server) +{ + long err = start_thread(); + + if (!err) + *server = _config->server; + + return err; +} + /* Initialise a server configuration for a resource. */ diff -r 6da4828f7c62 -r bee9eb69d257 libfsserver/lib/pipes/pipe_opener_resource.cc --- a/libfsserver/lib/pipes/pipe_opener_resource.cc Wed May 19 00:01:41 2021 +0200 +++ b/libfsserver/lib/pipes/pipe_opener_resource.cc Wed May 19 00:38:36 2021 +0200 @@ -62,22 +62,14 @@ return open_endpoint(paging, false, reader) || open_endpoint(paging, true, writer); } +/* Start the endpoint server in a new thread. If the thread does not start, the + resource (including pager) will be finalised. */ + long PipeOpenerResource::open_endpoint(PipePaging *paging, bool writing, l4_cap_idx_t *endpoint) { PipePager *pager = new PipePager(paging, writing); - /* Start the endpoint server in a new thread. - If the thread does not start, the resource should be finalised. */ - - ResourceServer server(pager); - long err = server.start_thread(); - - /* Return the server capability to the caller. */ - - if (!err) - *endpoint = server.config()->server; - - return err; + return ResourceServer(pager).start_thread(endpoint); } // vim: tabstop=4 expandtab shiftwidth=4