sk_has_sleeper(9) suse man page | unix.com

Man Page: sk_has_sleeper

Operating Environment: suse

Section: 9

SK_HAS_SLEEPER(9)						 Linux Networking						 SK_HAS_SLEEPER(9)

NAME
sk_has_sleeper - check if there are any waiting processes
SYNOPSIS
int sk_has_sleeper(struct sock * sk);
ARGUMENTS
sk socket
DESCRIPTION
Returns true if socket has waiting processes The purpose of the sk_has_sleeper and sock_poll_wait is to wrap the memory barrier call. They were added due to the race found within the tcp code.
CONSIDER FOLLOWING TCP CODE PATHS
CPU1 CPU2 sys_select receive packet ... ... __add_wait_queue update tp->rcv_nxt ... ... tp->rcv_nxt check sock_def_readable ... { schedule ... if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) wake_up_interruptible(sk->sk_sleep) ... } The race for tcp fires when the __add_wait_queue changes done by CPU1 stay in its cache, and so does the tp->rcv_nxt update on CPU2 side. The CPU1 could then endup calling schedule and sleep forever if there are no more data on the socket. The sk_has_sleeper is always called right after a call to read_lock, so we can use smp_mb__after_lock barrier.
COPYRIGHT
Kernel Hackers Manual 2.6. July 2010 SK_HAS_SLEEPER(9)
Related Man Pages
__skb_recv_datagram(9) - centos
cset-shield(1) - debian
tcp.h(3head) - sunos
ptsematest(8) - debian
pthread_barrier_init(3) - netbsd
Similar Topics in the Unix Linux Community
Change directory error
Getting command output to putty window title.
Migrating to UNIX
The Future of the PM (Private Message) System at UNIX.com
Shopt -s histappend