MCPcopy Create free account
hub / github.com/F-Stack/f-stack / sbfree

Function sbfree

freebsd/kern/uipc_sockbuf.c:295–339  ·  view source on GitHub ↗

* Adjust sockbuf state reflecting freeing of m. */

Source from the content-addressed store, hash-verified

293 * Adjust sockbuf state reflecting freeing of m.
294 */
295void
296sbfree(struct sockbuf *sb, struct mbuf *m)
297{
298
299#if 0 /* XXX: not yet: soclose() call path comes here w/o lock. */
300 SOCKBUF_LOCK_ASSERT(sb);
301#endif
302
303 sb->sb_ccc -= m->m_len;
304
305 if (!(m->m_flags & M_NOTAVAIL))
306 sb->sb_acc -= m->m_len;
307
308 if (m == sb->sb_fnrdy) {
309 struct mbuf *n;
310
311 KASSERT(m->m_flags & M_NOTREADY,
312 ("%s: m %p !M_NOTREADY", __func__, m));
313
314 n = m->m_next;
315 while (n != NULL && !(n->m_flags & M_NOTREADY)) {
316 n->m_flags &= ~M_BLOCKED;
317 sb->sb_acc += n->m_len;
318 n = n->m_next;
319 }
320 sb->sb_fnrdy = n;
321 }
322
323 if (m->m_type != MT_DATA && m->m_type != MT_OOBDATA)
324 sb->sb_ctl -= m->m_len;
325
326 sb->sb_mbcnt -= MSIZE;
327 sb->sb_mcnt -= 1;
328 if (m->m_flags & M_EXT) {
329 sb->sb_mbcnt -= m->m_ext.ext_size;
330 sb->sb_ccnt -= 1;
331 }
332
333 if (sb->sb_sndptr == m) {
334 sb->sb_sndptr = NULL;
335 sb->sb_sndptroff = 0;
336 }
337 if (sb->sb_sndptroff != 0)
338 sb->sb_sndptroff -= m->m_len;
339}
340
341#ifdef KERN_TLS
342/*

Callers 5

sbcut_internalFunction · 0.85
sbdroprecord_lockedFunction · 0.85
uipc_socket.cFile · 0.85
soreceive_streamFunction · 0.85
soreceive_dgramFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected