1.1 --- a/libfsclient/lib/src/file.cc Wed Aug 04 17:30:14 2021 +0200
1.2 +++ b/libfsclient/lib/src/file.cc Thu Aug 05 01:28:41 2021 +0200
1.3 @@ -445,7 +445,9 @@
1.4 if (err)
1.5 return err;
1.6
1.7 - err = pipe_next(writer) || pipe_next(reader);
1.8 + /* Obtain current region details. */
1.9 +
1.10 + err = pipe_current(writer) || pipe_current(reader);
1.11
1.12 if (err)
1.13 {
2.1 --- a/libfsserver/lib/pipes/pipe_opener_resource.cc Wed Aug 04 17:30:14 2021 +0200
2.2 +++ b/libfsserver/lib/pipes/pipe_opener_resource.cc Thu Aug 05 01:28:41 2021 +0200
2.3 @@ -19,6 +19,8 @@
2.4 * Boston, MA 02110-1301, USA
2.5 */
2.6
2.7 +#include <ipc/cap_alloc.h>
2.8 +
2.9 #include "pipe_opener_resource.h"
2.10 #include "pipe_opener_server.h"
2.11 #include "pipe_pager.h"
2.12 @@ -55,11 +57,24 @@
2.13
2.14 /* Each endpoint will have its own pager. */
2.15
2.16 - /* NOTE: Failure to open an endpoint should invalidate both, plus the
2.17 - paging object. Also, any active server thread would need to be
2.18 - cancelled. */
2.19 + long err = open_endpoint(paging, true, writer);
2.20 +
2.21 + if (err)
2.22 + return err;
2.23 +
2.24 + err = open_endpoint(paging, false, reader);
2.25
2.26 - return open_endpoint(paging, false, reader) || open_endpoint(paging, true, writer);
2.27 + /* Failure to open an endpoint should invalidate both, plus the paging
2.28 + object. Also, any active server thread would need to be cancelled. The
2.29 + freeing of the writer capability attempts to do this. */
2.30 +
2.31 + if (err)
2.32 + {
2.33 + ipc_cap_free_um(*writer);
2.34 + return err;
2.35 + }
2.36 +
2.37 + return L4_EOK;
2.38 }
2.39
2.40 /* Start the endpoint server in a new thread. If the thread does not start, the
2.41 @@ -69,6 +84,14 @@
2.42 {
2.43 PipePager *pager = new PipePager(paging, writing);
2.44
2.45 + /* Initialise the first region. */
2.46 +
2.47 + offset_t populated_size, region_size;
2.48 + long err = pager->next_region(&populated_size, ®ion_size);
2.49 +
2.50 + if (err)
2.51 + return err;
2.52 +
2.53 return ResourceServer(pager).start_thread(endpoint);
2.54 }
2.55