From f116ddeeadad1d7b6a698b8c6357383a7b1cbb0d Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Sat, 26 May 2012 12:21:25 -0700 Subject: [PATCH] refresh (create temporary patch) --- meta | 5 +-- patches/refresh-temp | 78 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 patches/refresh-temp diff --git a/meta b/meta index f2182b57..491694ac 100644 --- a/meta +++ b/meta @@ -1,6 +1,6 @@ Version: 1 -Previous: 8ce060b5e2c961143d3c612310b43e6328a40e97 -Head: ed95ce9c3c8c5a2397f546b0a538d8ecd22ed41f +Previous: 1170d6ab325b9af400b467523444a8a1a48734aa +Head: 45a277e15bfdfb73beddd1b9c10063c0d69911d3 Applied: destroy_cqs: 66410c265b2661e16b7f6126bcc4ea5c7e1af1bd conn-err: ac46465ae6061b06f005ba9b49b371c9eb0d2325 @@ -18,6 +18,7 @@ Applied: pre-socket: 8cb5871f6da8f40d9315e4dc57fdbeb9c3ae6de7 rs-states: b6f44cc4d1cce1b5580696e1fa60245b83c9382c rs-recv-hang: ed95ce9c3c8c5a2397f546b0a538d8ecd22ed41f + refresh-temp: 45a277e15bfdfb73beddd1b9c10063c0d69911d3 Unapplied: rs-test-nonblock: ce0584ae542bdd1e1e0b3f1683c1a62b874af064 Hidden: diff --git a/patches/refresh-temp b/patches/refresh-temp new file mode 100644 index 00000000..ff23e132 --- /dev/null +++ b/patches/refresh-temp @@ -0,0 +1,78 @@ +Bottom: 21cab4e0e2179a70e55cee483fbfdabf4510108a +Top: a9bac6f88801ea442e2b5d0736b252bd4e10d3f7 +Author: Sean Hefty +Date: 2012-05-26 12:21:25 -0700 + +Refresh of rs-recv-hang + +--- + +diff --git a/src/rsocket.c b/src/rsocket.c +index 70d0c46..e13613b 100644 +--- a/src/rsocket.c ++++ b/src/rsocket.c +@@ -937,6 +937,11 @@ static int rs_can_send(struct rsocket *rs) + (rs->target_sgl[rs->target_sge].length != 0); + } + ++static int rs_conn_can_send(struct rsocket *rs) ++{ ++ return rs_can_send(rs) || (rs->state != rs_connected); ++} ++ + static int rs_can_send_ctrl(struct rsocket *rs) + { + return rs->ctrl_avail; +@@ -947,6 +952,11 @@ static int rs_have_rdata(struct rsocket *rs) + return (rs->rmsg_head != rs->rmsg_tail); + } + ++static int rs_conn_have_rdata(struct rsocket *rs) ++{ ++ return rs_have_rdata(rs) || (rs->state != rs_connected); ++} ++ + static int rs_all_sends_done(struct rsocket *rs) + { + return (rs->sqe_avail + rs->ctrl_avail) == rs->sq_size; +@@ -1007,7 +1017,7 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags) + } + fastlock_acquire(&rs->rlock); + if (!rs_have_rdata(rs)) { +- ret = rs_process_cq(rs, rs_nonblocking(rs, flags), rs_have_rdata); ++ ret = rs_process_cq(rs, rs_nonblocking(rs, flags), rs_conn_have_rdata); + if (ret && errno != ECONNRESET) + goto out; + } +@@ -1111,9 +1121,14 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags) + fastlock_acquire(&rs->slock); + for (left = len; left; left -= xfer_size, buf += xfer_size) { + if (!rs_can_send(rs)) { +- ret = rs_process_cq(rs, rs_nonblocking(rs, flags), rs_can_send); ++ ret = rs_process_cq(rs, rs_nonblocking(rs, flags), ++ rs_conn_can_send); + if (ret) + break; ++ if (rs->state != rs_connected) { ++ ret = ERR(ECONNRESET); ++ break; ++ } + } + + if (olen < left) { +@@ -1208,9 +1223,14 @@ static ssize_t rsendv(int socket, const struct iovec *iov, int iovcnt, int flags + fastlock_acquire(&rs->slock); + for (left = len; left; left -= xfer_size) { + if (!rs_can_send(rs)) { +- ret = rs_process_cq(rs, rs_nonblocking(rs, flags), rs_can_send); ++ ret = rs_process_cq(rs, rs_nonblocking(rs, flags), ++ rs_conn_can_send); + if (ret) + break; ++ if (rs->state != rs_connected) { ++ ret = ERR(ECONNRESET); ++ break; ++ } + } + + if (olen < left) { -- 2.41.0