- 论坛徽章:
- 0
|
从下面的calltrace可以看出,unix_stream_recvmsg会调用sock_wfree,减少sk->sk_wmem_alloc值。
sk->sk_wmem_alloc不应该是发送缓冲区的内容大小么? recvmsg时为什么不是调用sock_rfree呢?
17-45-34: Call Trace:
17-45-34: [<803f3cf0>] dump_stack+0x8/0x34
17-45-34: [<802b6394>] sock_wfree+0xe0/0xe8
17-45-34: [<80372ffc>] unix_destruct_scm+0x98/0xb8
17-45-34: [<802bc724>] skb_release_head_state+0x78/0x114
17-45-34: [<802bc508>] __kfree_skb+0x14/0x128
17-45-34: [<80373a04>] unix_stream_recvmsg+0x4ac/0x72c
17-45-34: [<802b2f28>] sock_aio_read+0x104/0x148
17-45-34: [<800b1fe4>] do_sync_read+0xb8/0xf4
17-45-34: [<800b2d10>] vfs_read+0x168/0x180
17-45-34: [<800b2d74>] sys_read+0x4c/0x90
17-45-34: [<8001b8dc>] stack_done+0x20/0x40
void sock_wfree(struct sk_buff *skb)
{
struct sock *sk = skb->sk;
/* In case it might be waiting for more memory. */
atomic_sub(skb->truesize, &sk->sk_wmem_alloc);
if (!sock_flag(sk, SOCK_USE_WRITE_QUEUE))
sk->sk_write_space(sk);
sock_put(sk);
} |
|