| version 1.91, 2003/10/21 22:55:47 |
version 1.92, 2004/03/17 09:58:15 |
| Line 249 sodopendfree(struct socket *so) |
|
| Line 249 sodopendfree(struct socket *so) |
|
| pool_cache_put(&mbpool_cache, m); |
pool_cache_put(&mbpool_cache, m); |
| } |
} |
| |
|
| for (;;) { |
|
| m = so->so_pendfree; |
|
| if (m == NULL) |
|
| break; |
|
| so->so_pendfree = m->m_next; |
|
| splx(s); |
|
| |
|
| rv += m->m_ext.ext_size; |
|
| sodoloanfree((m->m_flags & M_EXT_PAGES) ? |
|
| m->m_ext.ext_pgs : NULL, m->m_ext.ext_buf, |
|
| m->m_ext.ext_size); |
|
| s = splvm(); |
|
| pool_cache_put(&mbpool_cache, m); |
|
| } |
|
| |
|
| splx(s); |
splx(s); |
| return (rv); |
return (rv); |
| } |
} |
| Line 271 sodopendfree(struct socket *so) |
|
| Line 256 sodopendfree(struct socket *so) |
|
| void |
void |
| soloanfree(struct mbuf *m, caddr_t buf, size_t size, void *arg) |
soloanfree(struct mbuf *m, caddr_t buf, size_t size, void *arg) |
| { |
{ |
| struct socket *so = arg; |
|
| int s; |
int s; |
| |
|
| if (m == NULL) { |
if (m == NULL) { |
| Line 280 soloanfree(struct mbuf *m, caddr_t buf, |
|
| Line 264 soloanfree(struct mbuf *m, caddr_t buf, |
|
| } |
} |
| |
|
| s = splvm(); |
s = splvm(); |
| m->m_next = so->so_pendfree; |
m->m_next = so_pendfree; |
| so->so_pendfree = m; |
so_pendfree = m; |
| splx(s); |
splx(s); |
| if (sokvawaiters) |
if (sokvawaiters) |
| wakeup(&socurkva); |
wakeup(&socurkva); |
| Line 435 solisten(struct socket *so, int backlog) |
|
| Line 419 solisten(struct socket *so, int backlog) |
|
| void |
void |
| sofree(struct socket *so) |
sofree(struct socket *so) |
| { |
{ |
| struct mbuf *m; |
|
| |
|
| if (so->so_pcb || (so->so_state & SS_NOFDREF) == 0) |
if (so->so_pcb || (so->so_state & SS_NOFDREF) == 0) |
| return; |
return; |
| Line 450 sofree(struct socket *so) |
|
| Line 433 sofree(struct socket *so) |
|
| } |
} |
| sbrelease(&so->so_snd); |
sbrelease(&so->so_snd); |
| sorflush(so); |
sorflush(so); |
| while ((m = so->so_pendfree) != NULL) { |
|
| so->so_pendfree = m->m_next; |
|
| m->m_next = so_pendfree; |
|
| so_pendfree = m; |
|
| } |
|
| pool_put(&socket_pool, so); |
pool_put(&socket_pool, so); |
| } |
} |
| |
|