Mercurial > hg > freeDiameter
diff libfdcore/peers.c @ 1010:357c2f892d24
Implement a new counter on pending answers to send back to a peer.
Function fd_peer_get_load_pending updated to retrieve this counter as well.
When a peer has answers pending, the connection is not immediately teared down
upon DPR/DPA exchange, but a GRACE_TIMEOUT delay (default 1 sec) is granted.
author | Sebastien Decugis <sdecugis@freediameter.net> |
---|---|
date | Mon, 25 Mar 2013 16:39:32 +0100 |
parents | 2091bf698fb1 |
children | 0117a7746b21 |
line wrap: on
line diff
--- a/libfdcore/peers.c Mon Mar 25 14:35:55 2013 +0100 +++ b/libfdcore/peers.c Mon Mar 25 16:39:32 2013 +0100 @@ -257,15 +257,22 @@ } /* Return the value of srlist->cnt */ -int fd_peer_get_load_pending(struct peer_hdr *peer, int * load) +int fd_peer_get_load_pending(struct peer_hdr *peer, long * to_receive, long * to_send) { struct fd_peer * p = (struct fd_peer *)peer; - TRACE_ENTRY("%p %p", peer, load); - CHECK_PARAMS(CHECK_PEER(peer) && load); + TRACE_ENTRY("%p %p %p", peer, to_receive, to_send); + CHECK_PARAMS(CHECK_PEER(peer)); - CHECK_POSIX( pthread_mutex_lock(&p->p_sr.mtx) ); - *load = p->p_sr.cnt; - CHECK_POSIX( pthread_mutex_unlock(&p->p_sr.mtx) ); + if (to_receive) { + CHECK_POSIX( pthread_mutex_lock(&p->p_sr.mtx) ); + *to_receive = p->p_sr.cnt; + CHECK_POSIX( pthread_mutex_unlock(&p->p_sr.mtx) ); + } + if (to_send) { + CHECK_POSIX( pthread_mutex_lock(&p->p_state_mtx) ); + *to_send = p->p_reqin_count; + CHECK_POSIX( pthread_mutex_unlock(&p->p_state_mtx) ); + } return 0; } @@ -410,7 +417,7 @@ return; } - snprintf(buf, sizeof(buf), "> %s\t%s\t[%dsr]", STATE_STR(fd_peer_getstate(peer)), peer->p_hdr.info.pi_diamid, peer->p_sr.cnt); + snprintf(buf, sizeof(buf), "> %s\t%s\t[%ldsr,%ldpa]", STATE_STR(fd_peer_getstate(peer)), peer->p_hdr.info.pi_diamid, peer->p_sr.cnt, peer->p_reqin_count); if (details > INFO) { snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "\t(rlm:%s)", peer->p_hdr.info.runtime.pir_realm ?: "<unknown>"); if (peer->p_hdr.info.runtime.pir_prodname)