diff options
author | rrs <rrs@FreeBSD.org> | 2007-04-19 11:28:43 +0000 |
---|---|---|
committer | rrs <rrs@FreeBSD.org> | 2007-04-19 11:28:43 +0000 |
commit | e8a77bd9270dfbfa30aa44607f5f3ecb4e70ee3e (patch) | |
tree | d950582b945c3e6f66e506197c41a7fa14d07c72 /sys/netinet/sctp_pcb.c | |
parent | 19613c2bfe0ba59b977ac06457e84b93cceb5045 (diff) | |
download | FreeBSD-src-e8a77bd9270dfbfa30aa44607f5f3ecb4e70ee3e.zip FreeBSD-src-e8a77bd9270dfbfa30aa44607f5f3ecb4e70ee3e.tar.gz |
- More work on making send lock contention.
- Removed free-oqueue cache.
- Fix counter for sq entries
- Increased the amount of information retained
on ASOC_TSN logging on the association.
- Made it so with the ASOC_TSN logging on
sending or recieving an abort we dump the log.
- Went through and added invariant's around some
panic's that needed them.
- decrements went to atomic_subtact_int instead of add -1
- Removed residual count increment that threw off a
strm oq count.
- Tracks and complaints if we don't have a LAST fragment and
clean up the sp structure.
- Track a new stat that counts number of abandoned msgs that
happen if you close without reading.
- Fix lookup of frag point to be aware of a 0 assoc-id.
Reviewed by: gnn
Diffstat (limited to 'sys/netinet/sctp_pcb.c')
-rw-r--r-- | sys/netinet/sctp_pcb.c | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c index da7d864..24c04b3 100644 --- a/sys/netinet/sctp_pcb.c +++ b/sys/netinet/sctp_pcb.c @@ -2689,6 +2689,10 @@ sctp_inpcb_free(struct sctp_inpcb *inp, int immediate, int from) inp->sctp_ep.signature_change.type = SCTP_TIMER_TYPE_NONE; /* Clear the read queue */ while ((sq = TAILQ_FIRST(&inp->read_queue)) != NULL) { + /* Its only abandoned if it had data left */ + if (sq->length) + SCTP_STAT_INCR(sctps_left_abandon); + TAILQ_REMOVE(&inp->read_queue, sq, next); sctp_free_remote_addr(sq->whoFrom); if (so) @@ -3776,19 +3780,6 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre } } - while ((sp = TAILQ_FIRST(&asoc->free_strmoq)) != NULL) { - TAILQ_REMOVE(&asoc->free_strmoq, sp, next); - if (sp->data) { - sctp_m_freem(sp->data); - sp->data = NULL; - sp->tail_mbuf = NULL; - } - /* Free the zone stuff */ - SCTP_ZONE_FREE(sctppcbinfo.ipi_zone_strmoq, sp); - SCTP_DECR_STRMOQ_COUNT(); - atomic_add_int(&sctppcbinfo.ipi_free_strmoq, -1); - } - while ((liste = TAILQ_FIRST(&asoc->resetHead)) != NULL) { TAILQ_REMOVE(&asoc->resetHead, liste, next_resp); SCTP_FREE(liste); |