From: Sean Hefty Date: Tue, 21 Aug 2012 20:49:59 +0000 (-0700) Subject: debug fork issue X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=12cc7c21255592d07188cd12ff7c79b485d763e2;p=~shefty%2Flibrdmacm.git debug fork issue --- diff --git a/src/preload.c b/src/preload.c index 0645f6dd..cdca9dfe 100644 --- a/src/preload.c +++ b/src/preload.c @@ -413,11 +413,13 @@ int socket(int domain, int type, int protocol) return index; recursive = 1; - ret = rsocket(domain, type, protocol); +// ret = rsocket(domain, type, protocol); +goto realsock; recursive = 0; if (ret >= 0) { if (fork_support) { rclose(ret); +realsock: ret = real.socket(domain, type, protocol); if (ret < 0) return ret; diff --git a/src/rsocket.c b/src/rsocket.c index 4c4821bc..52476a27 100644 --- a/src/rsocket.c +++ b/src/rsocket.c @@ -156,6 +156,10 @@ struct rsocket { fastlock_t cq_lock; fastlock_t cq_wait_lock; + struct rs_msg last_ctrl; + uint64_t bytes_sent; + uint64_t bytes_received; + int opts; long fd_flags; uint64_t so_opts; @@ -816,6 +820,7 @@ static void rs_send_credits(struct rsocket *rs) rs->ctrl_avail--; rs->rseq_comp = rs->rseq_no + (rs->rq_size >> 1); + rs->last_ctrl.op = rs->rseq_no + rs->rq_size; if (rs->rbuf_bytes_avail >= (rs->rbuf_size >> 1)) { if (!(rs->opts & RS_OPT_SWAP_SGL)) { sge.addr = (uintptr_t) &rs->rbuf[rs->rbuf_free_offset]; @@ -830,6 +835,7 @@ static void rs_send_credits(struct rsocket *rs) ibsge.addr = (uintptr_t) &sge; ibsge.lkey = 0; ibsge.length = sizeof(sge); + rs->last_ctrl.data = sge.length; rs_post_write(rs, &ibsge, 1, rs_msg_set(RS_OP_SGL, rs->rseq_no + rs->rq_size), @@ -845,6 +851,7 @@ static void rs_send_credits(struct rsocket *rs) if (++rs->remote_sge == rs->remote_sgl.length) rs->remote_sge = 0; } else { + rs->last_ctrl.data = 0; rs_post_write(rs, NULL, 0, rs_msg_set(RS_OP_SGL, rs->rseq_no + rs->rq_size), 0, 0, 0); } @@ -1173,6 +1180,7 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags) } while (left && (flags & MSG_WAITALL) && (rs->state & rs_connect_rd)); + rs->bytes_received += (len - left); fastlock_release(&rs->rlock); return ret ? ret : len - left; } @@ -1289,6 +1297,7 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags) if (ret) break; } + rs->bytes_sent += (len - left); fastlock_release(&rs->slock); return (ret && left == len) ? ret : len - left;