From: Sean Hefty Date: Mon, 28 May 2012 08:13:57 +0000 (-0700) Subject: refresh (create temporary patch) X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=dda72542b900664be8a7688f60037302d9e056ce;p=~shefty%2Flibrdmacm.git refresh (create temporary patch) --- diff --git a/meta b/meta index fba49080..c506c14b 100644 --- a/meta +++ b/meta @@ -1,6 +1,6 @@ Version: 1 -Previous: e0d8bf054de0b16d6fcd269d58a286c048fbf3d2 -Head: 548f496443177ae86bbd9690ad315351ce1efae4 +Previous: 98b69a5fd74cf17c5fbee71edc60d88e4d0ae470 +Head: f4aeb798a274ac7a194d566849b9536b9e64e83d Applied: destroy_cqs: 66410c265b2661e16b7f6126bcc4ea5c7e1af1bd conn-err: ac46465ae6061b06f005ba9b49b371c9eb0d2325 @@ -15,6 +15,7 @@ Applied: acm-init: 666fa02d8f18ac2e98008cd3d57a90a864203548 pre-socket: 659f605c2d6bdba067651138aa5ffc01f14465d6 rs-states: 548f496443177ae86bbd9690ad315351ce1efae4 + refresh-temp: f4aeb798a274ac7a194d566849b9536b9e64e83d Unapplied: rs-1sge: 85e4c4a0da0b501b60a1035d7a003ee20a749511 rs-def-inline: 6ad70d3b80178e40fea97f662a6b31e51cddc0af diff --git a/patches/refresh-temp b/patches/refresh-temp new file mode 100644 index 00000000..3a258864 --- /dev/null +++ b/patches/refresh-temp @@ -0,0 +1,92 @@ +Bottom: 87ab98f3bddaca811ce2dc2b7920287c23686a20 +Top: 82e13151ae7719d96c8c400a99918961bc514175 +Author: Sean Hefty +Date: 2012-05-28 01:13:57 -0700 + +Refresh of rs-states + +--- + +diff --git a/src/rsocket.c b/src/rsocket.c +index 1140975..9ce58d5 100644 +--- a/src/rsocket.c ++++ b/src/rsocket.c +@@ -126,6 +126,9 @@ union rs_wr_id { + }; + }; + ++/* ++ * rsocket states are ordered as passive, connecting, connected, disconnected. ++ */ + enum rs_state { + rs_init, + rs_bound, +@@ -134,9 +137,9 @@ enum rs_state { + rs_resolving_route, + rs_connecting, + rs_accepting, ++ rs_connect_error, + rs_connected, + rs_disconnected, +- rs_connect_error, + rs_error + }; + +@@ -1011,9 +1014,7 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags) + int ret; + + rs = idm_at(&idm, socket); +- if (rs->state != rs_connected && +- (rs->state == rs_resolving_addr || rs->state == rs_resolving_route || +- rs->state == rs_connecting || rs->state == rs_accepting)) { ++ if (rs->state < rs_connected) { + ret = rs_do_connect(rs); + if (ret) { + if (errno == EINPROGRESS) +@@ -1115,7 +1116,7 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags) + int ret = 0; + + rs = idm_at(&idm, socket); +- if (rs->state != rs_connected) { ++ if (rs->state < rs_connected) { + ret = rs_do_connect(rs); + if (ret) { + if (errno == EINPROGRESS) +@@ -1219,7 +1220,7 @@ static ssize_t rsendv(int socket, const struct iovec *iov, int iovcnt, int flags + int i, ret = 0; + + rs = idm_at(&idm, socket); +- if (rs->state != rs_connected) { ++ if (rs->state < rs_connected) { + ret = rs_do_connect(rs); + if (ret) { + if (errno == EINPROGRESS) +@@ -1360,7 +1361,7 @@ static int rs_poll_rs(struct rsocket *rs, int events, + revents |= POLLOUT; + if (rs->state == rs_disconnected) + revents |= POLLHUP; +- if (rs->state == rs_error) ++ else if (rs->state == rs_error) + revents |= POLLERR; + + return revents; +@@ -1401,16 +1402,11 @@ static int rs_poll_arm(struct pollfd *rfds, struct pollfd *fds, nfds_t nfds) + if (fds[i].revents) + return 1; + +- switch (rs->state) { +- case rs_connected: +- case rs_disconnected: +- case rs_error: ++ if (rs->state >= rs_connected) + rfds[i].fd = rs->cm_id->recv_cq_channel->fd; +- break; +- default: ++ else + rfds[i].fd = rs->cm_id->channel->fd; +- break; +- } ++ + rfds[i].events = POLLIN; + } else { + rfds[i].fd = fds[i].fd;