1.1 --- a/libfsclient/lib/src/client.cc Tue Aug 31 23:51:13 2021 +0200
1.2 +++ b/libfsclient/lib/src/client.cc Sat Sep 04 23:23:32 2021 +0200
1.3 @@ -77,6 +77,15 @@
1.4 }
1.5 else
1.6 {
1.7 + /* Handle the initial condition with no current region. */
1.8 +
1.9 + if (file->memory == NULL)
1.10 + {
1.11 + err = client_current_region(file);
1.12 + if (err)
1.13 + return err;
1.14 + }
1.15 +
1.16 /* Strict conditions for region navigation in pipes. */
1.17
1.18 if ((position < file->start_pos) || (position > file->end_pos))
2.1 --- a/libfsclient/lib/src/file.cc Tue Aug 31 23:51:13 2021 +0200
2.2 +++ b/libfsclient/lib/src/file.cc Sat Sep 04 23:23:32 2021 +0200
2.3 @@ -481,21 +481,7 @@
2.4 file_init(reader);
2.5 file_init(writer);
2.6
2.7 - long err = opener.pipe(size, &reader->ref, &writer->ref);
2.8 - if (err)
2.9 - return err;
2.10 -
2.11 - /* Obtain current region details. */
2.12 -
2.13 - err = pipe_current(writer) || pipe_current(reader);
2.14 -
2.15 - if (err)
2.16 - {
2.17 - file_close(reader);
2.18 - file_close(writer);
2.19 - }
2.20 -
2.21 - return err;
2.22 + return opener.pipe(size, &reader->ref, &writer->ref);
2.23 }
2.24
2.25 /* Access the current region for a pipe endpoint. */
3.1 --- a/libfsserver/lib/files/ext2_file_opener.cc Tue Aug 31 23:51:13 2021 +0200
3.2 +++ b/libfsserver/lib/files/ext2_file_opener.cc Sat Sep 04 23:23:32 2021 +0200
3.3 @@ -118,8 +118,8 @@
3.4
3.5 file_t *reader, *writer;
3.6
3.7 - // NOTE: Might be more appropriate to use lower-level file operations to
3.8 - // NOTE: avoid unnecessary mapping of the reader's memory region.
3.9 + // Mapping of the reader's memory region should be avoided because no use
3.10 + // of the reader will be made here.
3.11
3.12 long err = client_pipe(&reader, &writer, 0);
3.13
4.1 --- a/libfsserver/lib/files/host_file_opener.cc Tue Aug 31 23:51:13 2021 +0200
4.2 +++ b/libfsserver/lib/files/host_file_opener.cc Sat Sep 04 23:23:32 2021 +0200
4.3 @@ -39,16 +39,6 @@
4.4 DIR *dir = opendir(path);
4.5 struct dirent *dirent;
4.6
4.7 - /* Subscribe to space and closure notifications on the pipe. */
4.8 -
4.9 - long err = client_set_blocking(writer, NOTIFY_SPACE_AVAILABLE | NOTIFY_PEER_CLOSED);
4.10 -
4.11 - if (err)
4.12 - {
4.13 - client_close(writer);
4.14 - return;
4.15 - }
4.16 -
4.17 /* Write directory entries to the pipe, closing the pipe when finished. */
4.18
4.19 while ((dirent = readdir(dir)) != NULL)
4.20 @@ -102,10 +92,10 @@
4.21
4.22 file_t *reader, *writer;
4.23
4.24 - // NOTE: Might be more appropriate to use lower-level file operations to
4.25 - // NOTE: avoid unnecessary mapping of the reader's memory region.
4.26 + // Mapping of the reader's memory region should be avoided because no use
4.27 + // of the reader will be made here.
4.28
4.29 - long err = client_pipe(&reader, &writer, O_NONBLOCK);
4.30 + long err = client_pipe(&reader, &writer, 0);
4.31
4.32 if (err)
4.33 return err;