summaryrefslogtreecommitdiffstats
path: root/sys/netinet/sctp_pcb.c
diff options
context:
space:
mode:
authorrrs <rrs@FreeBSD.org>2007-04-19 11:28:43 +0000
committerrrs <rrs@FreeBSD.org>2007-04-19 11:28:43 +0000
commite8a77bd9270dfbfa30aa44607f5f3ecb4e70ee3e (patch)
treed950582b945c3e6f66e506197c41a7fa14d07c72 /sys/netinet/sctp_pcb.c
parent19613c2bfe0ba59b977ac06457e84b93cceb5045 (diff)
downloadFreeBSD-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.c17
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);
OpenPOWER on IntegriCloud