From 554d47ecb5f35dd5bb850f5e20dde978bea37061 Mon Sep 17 00:00:00 2001 From: Mikio Hara Date: Fri, 9 Aug 2013 09:02:27 +0900 Subject: [PATCH] net: separate unix pollster initialization from network file descriptor allocation Unlike the existing net package own pollster, runtime-integrated network pollster on BSD variants, actually kqueue, requires a socket that has beed passed to syscall.Listen previously for a stream listener. This CL separates pollDesc.Init of Unix network pollster from newFD to avoid any breakages in the transition from Unix network pollster to runtime-integrated pollster. Upcoming CLs will rearrange the call order of pollster and syscall functions like the following; - For dialers that open active connections, pollDesc.Init will be called in between syscall.Bind and syscall.Connect. - For stream listeners that open passive stream connections, pollDesc.Init will be called just after syscall.Listen. - For datagram listeners that open datagram connections, pollDesc.Init will be called just after syscall.Bind. This is in preparation for runtime-integrated network pollster for BSD variants. Update #5199 R=dvyukov, bradfitz CC=golang-dev https://golang.org/cl/12663043 --- src/pkg/net/fd_poll_unix.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/pkg/net/fd_poll_unix.go b/src/pkg/net/fd_poll_unix.go index 9834190fda..bbe827a5bf 100644 --- a/src/pkg/net/fd_poll_unix.go +++ b/src/pkg/net/fd_poll_unix.go @@ -252,14 +252,23 @@ func (pd *pollDesc) Close() { } func (pd *pollDesc) Lock() { + if pd.pollServer == nil { + return + } pd.pollServer.Lock() } func (pd *pollDesc) Unlock() { + if pd.pollServer == nil { + return + } pd.pollServer.Unlock() } func (pd *pollDesc) Wakeup() { + if pd.pollServer == nil { + return + } pd.pollServer.Wakeup() } @@ -294,6 +303,9 @@ func (pd *pollDesc) WaitWrite() error { } func (pd *pollDesc) Evict() bool { + if pd.pollServer == nil { + return false + } return pd.pollServer.Evict(pd) } -- 2.48.1