* Free all mbufs in a sockbuf. Check that all resources are reclaimed. */
| 1425 | * Free all mbufs in a sockbuf. Check that all resources are reclaimed. |
| 1426 | */ |
| 1427 | static void |
| 1428 | sbflush_internal(struct sockbuf *sb) |
| 1429 | { |
| 1430 | |
| 1431 | while (sb->sb_mbcnt || sb->sb_tlsdcc) { |
| 1432 | /* |
| 1433 | * Don't call sbcut(sb, 0) if the leading mbuf is non-empty: |
| 1434 | * we would loop forever. Panic instead. |
| 1435 | */ |
| 1436 | if (sb->sb_ccc == 0 && (sb->sb_mb == NULL || sb->sb_mb->m_len)) |
| 1437 | break; |
| 1438 | m_freem(sbcut_internal(sb, (int)sb->sb_ccc)); |
| 1439 | } |
| 1440 | KASSERT(sb->sb_ccc == 0 && sb->sb_mb == 0 && sb->sb_mbcnt == 0, |
| 1441 | ("%s: ccc %u mb %p mbcnt %u", __func__, |
| 1442 | sb->sb_ccc, (void *)sb->sb_mb, sb->sb_mbcnt)); |
| 1443 | } |
| 1444 | |
| 1445 | void |
| 1446 | sbflush_locked(struct sockbuf *sb) |
no test coverage detected