Version: 1
-Previous: e7b120d04c2b21c188dea0107c576ea256c5335a
+Previous: b9f0fab11b99e2988bb70ce29627a86e4659d033
Head: 7601a5adca71f10ad1cb63292c769b7b9a35dd08
Applied:
rs-locking: ec6a8efe211b0dc98548443c2e0d67e2c355351f
rstream-async-opt: 0ee1dfc9ad50f07fd3708ebb04cb92e0fb2f41d5
rs-nodelay: 7601a5adca71f10ad1cb63292c769b7b9a35dd08
Unapplied:
- rstream-spinpoll: a7f657e418c1ba35ba61550f67f6bf7bb1352575
comp_locks: b89aab130b4619806557e11e6b9c10964f00743f
preload: 5dfe7abc07064485c5100e04e5412279244c2bc3
Hidden:
+++ /dev/null
-Bottom: fb3f150e6146757e6bdb884182c4b19457bd6b6b
-Top: 9bd029a43201d8d7586d4167218571a9c818e2d0
-Author: Sean Hefty <sean.hefty@intel.com>
-Date: 2012-05-16 11:26:33 -0700
-
-rstream: Provide test option to spin on rpoll
-
-Add a test option to use asynchronous rsockets with nonblocking
-rpoll call. This simulates the behavior used by MPI.
-
-Signed-off-by: Sean Hefty <sean.hefty@intel.com>
-
-
----
-
-diff --git a/examples/rstream.c b/examples/rstream.c
-index decb204..75e5246 100644
---- a/examples/rstream.c
-+++ b/examples/rstream.c
-@@ -191,6 +191,17 @@ static int verify_buf(void *buf, int size)
- return 0;
- }
-
-+static int do_poll(struct pollfd *fds)
-+{
-+ int ret;
-+
-+ do {
-+ ret = rs_poll(fds, 1, poll_timeout);
-+ } while (ret < 0 && (errno == EAGAIN || errno == EWOULDBLOCK));
-+
-+ return ret;
-+}
-+
- static int send_xfer(int rs, int size)
- {
- struct pollfd fds;
-@@ -206,7 +217,7 @@ static int send_xfer(int rs, int size)
-
- for (offset = 0; offset < size; ) {
- if (use_async) {
-- ret = rs_poll(&fds, 1, -1);
-+ ret = do_poll(&fds);
- if (ret != 1)
- return ret;
- }
-@@ -235,7 +246,7 @@ static int recv_xfer(int rs, int size)
-
- for (offset = 0; offset < size; ) {
- if (use_async) {
-- ret = rs_poll(&fds, 1, -1);
-+ ret = do_poll(&fds);
- if (ret != 1)
- return ret;
- }
-@@ -380,7 +391,7 @@ static int server_connect(void)
- fds.fd = lrs;
- fds.events = POLLIN;
-
-- ret = rs_poll(&fds, 1, -1);
-+ ret = do_poll(&fds);
- if (ret != 1) {
- perror("rpoll");
- goto close;
-@@ -424,21 +435,26 @@ static int client_connect(void)
- ret = rs_connect(rs, res->ai_addr, res->ai_addrlen);
- if (ret && (errno != EINPROGRESS)) {
- perror("rconnect");
-- rs_close(rs);
-- rs = ret;
-+ goto err;
- }
-
- if (errno == EINPROGRESS) {
- fds.fd = rs;
- fds.events = POLLOUT;
-- do {
-- ret = rs_poll(&fds, 1, -1);
-- } while (!ret);
-+ ret = do_poll(&fds);
-+ if (ret != 1) {
-+ perror("rpoll");
-+ goto err;
-+ }
- }
-
- free:
- freeaddrinfo(res);
- return rs;
-+err:
-+ freeaddrinfo(res);
-+ rs_close(rs);
-+ return -1;
- }
-
- static int run(void)
-@@ -485,6 +501,7 @@ static int set_test_opt(char *optarg)
- break;
- case 'a':
- use_async = 1;
-+ flags |= MSG_DONTWAIT;
- break;
- case 'b':
- flags &= ~MSG_DONTWAIT;
-diff --git a/man/rstream.1 b/man/rstream.1
-index 58bd7e3..98f3d8e 100644
---- a/man/rstream.1
-+++ b/man/rstream.1
-@@ -46,6 +46,8 @@ b | blocking - uses blocking calls
- .P
- n | nonblocking - uses non-blocking calls
- .P
-+p | poll - poll on asynchronous operations until complete
-+.P
- v | verify - verifies data transfers
- .SH "NOTES"
- Basic usage is to start rstream on a server system, then run