Navigation


Changeset 1010:357c2f892d24 in freeDiameter for libfdcore/peers.c


Ignore:
Timestamp:
Mar 26, 2013, 12:39:32 AM (11 years ago)
Author:
Sebastien Decugis <sdecugis@freediameter.net>
Branch:
default
Phase:
public
Message:

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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libfdcore/peers.c

    r974 r1010  
    258258
    259259/* Return the value of srlist->cnt */
    260 int fd_peer_get_load_pending(struct peer_hdr *peer, int * load)
     260int fd_peer_get_load_pending(struct peer_hdr *peer, long * to_receive, long * to_send)
    261261{
    262262        struct fd_peer * p = (struct fd_peer *)peer;
    263         TRACE_ENTRY("%p %p", peer, load);
    264         CHECK_PARAMS(CHECK_PEER(peer) && load);
    265        
    266         CHECK_POSIX( pthread_mutex_lock(&p->p_sr.mtx) );
    267         *load = p->p_sr.cnt;
    268         CHECK_POSIX( pthread_mutex_unlock(&p->p_sr.mtx) );
     263        TRACE_ENTRY("%p %p %p", peer, to_receive, to_send);
     264        CHECK_PARAMS(CHECK_PEER(peer));
     265       
     266        if (to_receive) {
     267                CHECK_POSIX( pthread_mutex_lock(&p->p_sr.mtx) );
     268                *to_receive = p->p_sr.cnt;
     269                CHECK_POSIX( pthread_mutex_unlock(&p->p_sr.mtx) );
     270        }
     271        if (to_send) {
     272                CHECK_POSIX( pthread_mutex_lock(&p->p_state_mtx) );
     273                *to_send = p->p_reqin_count;
     274                CHECK_POSIX( pthread_mutex_unlock(&p->p_state_mtx) );
     275        }
    269276       
    270277        return 0;
     
    411418        }
    412419
    413         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);
     420        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);
    414421        if (details > INFO) {
    415422                snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "\t(rlm:%s)", peer->p_hdr.info.runtime.pir_realm ?: "<unknown>");
Note: See TracChangeset for help on using the changeset viewer.