aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorAndy Pan <panjf2000@gmail.com>2022-07-25 12:32:24 +0800
committerMichael Knyszek <mknyszek@google.com>2022-08-09 13:23:50 +0000
commitffe5f085cd8b289a7853fcdb3c26adbebda09fd6 (patch)
treeef5c6a837de114e1aef48a4d655a1717ed0043a2 /src/runtime
parent13bd6ddbe7a4fb24448546545da5df999267eb4e (diff)
downloadgo-ffe5f085cd8b289a7853fcdb3c26adbebda09fd6.tar.xz
runtime: refine code reducing indents in netpollBreak()
Change-Id: I2d1528910cb3660344c7a664d6f32306defe75d3 Reviewed-on: https://go-review.googlesource.com/c/go/+/419321 Reviewed-by: Michael Pratt <mpratt@google.com> Auto-Submit: Michael Knyszek <mknyszek@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Michael Pratt <mpratt@google.com>
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/netpoll_aix.go9
-rw-r--r--src/runtime/netpoll_epoll.go33
-rw-r--r--src/runtime/netpoll_kqueue.go27
-rw-r--r--src/runtime/netpoll_solaris.go25
-rw-r--r--src/runtime/netpoll_windows.go13
5 files changed, 61 insertions, 46 deletions
diff --git a/src/runtime/netpoll_aix.go b/src/runtime/netpoll_aix.go
index 22cc513881..5247e56373 100644
--- a/src/runtime/netpoll_aix.go
+++ b/src/runtime/netpoll_aix.go
@@ -135,10 +135,13 @@ func netpollarm(pd *pollDesc, mode int) {
// netpollBreak interrupts a poll.
func netpollBreak() {
- if atomic.Cas(&netpollWakeSig, 0, 1) {
- b := [1]byte{0}
- write(uintptr(wrwake), unsafe.Pointer(&b[0]), 1)
+ // Failing to cas indicates there is an in-flight wakeup, so we're done here.
+ if !atomic.Cas(&netpollWakeSig, 0, 1) {
+ return
}
+
+ b := [1]byte{0}
+ write(uintptr(wrwake), unsafe.Pointer(&b[0]), 1)
}
// netpoll checks for ready network connections.
diff --git a/src/runtime/netpoll_epoll.go b/src/runtime/netpoll_epoll.go
index b7d6199965..7ad2c8ab35 100644
--- a/src/runtime/netpoll_epoll.go
+++ b/src/runtime/netpoll_epoll.go
@@ -79,22 +79,25 @@ func netpollarm(pd *pollDesc, mode int) {
// netpollBreak interrupts an epollwait.
func netpollBreak() {
- if atomic.Cas(&netpollWakeSig, 0, 1) {
- for {
- var b byte
- n := write(netpollBreakWr, unsafe.Pointer(&b), 1)
- if n == 1 {
- break
- }
- if n == -_EINTR {
- continue
- }
- if n == -_EAGAIN {
- return
- }
- println("runtime: netpollBreak write failed with", -n)
- throw("runtime: netpollBreak write failed")
+ // Failing to cas indicates there is an in-flight wakeup, so we're done here.
+ if !atomic.Cas(&netpollWakeSig, 0, 1) {
+ return
+ }
+
+ for {
+ var b byte
+ n := write(netpollBreakWr, unsafe.Pointer(&b), 1)
+ if n == 1 {
+ break
+ }
+ if n == -_EINTR {
+ continue
+ }
+ if n == -_EAGAIN {
+ return
}
+ println("runtime: netpollBreak write failed with", -n)
+ throw("runtime: netpollBreak write failed")
}
}
diff --git a/src/runtime/netpoll_kqueue.go b/src/runtime/netpoll_kqueue.go
index 1694753b6f..78d1663ad9 100644
--- a/src/runtime/netpoll_kqueue.go
+++ b/src/runtime/netpoll_kqueue.go
@@ -83,19 +83,22 @@ func netpollarm(pd *pollDesc, mode int) {
// netpollBreak interrupts a kevent.
func netpollBreak() {
- if atomic.Cas(&netpollWakeSig, 0, 1) {
- for {
- var b byte
- n := write(netpollBreakWr, unsafe.Pointer(&b), 1)
- if n == 1 || n == -_EAGAIN {
- break
- }
- if n == -_EINTR {
- continue
- }
- println("runtime: netpollBreak write failed with", -n)
- throw("runtime: netpollBreak write failed")
+ // Failing to cas indicates there is an in-flight wakeup, so we're done here.
+ if !atomic.Cas(&netpollWakeSig, 0, 1) {
+ return
+ }
+
+ for {
+ var b byte
+ n := write(netpollBreakWr, unsafe.Pointer(&b), 1)
+ if n == 1 || n == -_EAGAIN {
+ break
+ }
+ if n == -_EINTR {
+ continue
}
+ println("runtime: netpollBreak write failed with", -n)
+ throw("runtime: netpollBreak write failed")
}
}
diff --git a/src/runtime/netpoll_solaris.go b/src/runtime/netpoll_solaris.go
index 6e545b3d31..ec51771b57 100644
--- a/src/runtime/netpoll_solaris.go
+++ b/src/runtime/netpoll_solaris.go
@@ -191,17 +191,20 @@ func netpollarm(pd *pollDesc, mode int) {
// netpollBreak interrupts a port_getn wait.
func netpollBreak() {
- if atomic.Cas(&netpollWakeSig, 0, 1) {
- // Use port_alert to put portfd into alert mode.
- // This will wake up all threads sleeping in port_getn on portfd,
- // and cause their calls to port_getn to return immediately.
- // Further, until portfd is taken out of alert mode,
- // all calls to port_getn will return immediately.
- if port_alert(portfd, _PORT_ALERT_UPDATE, _POLLHUP, uintptr(unsafe.Pointer(&portfd))) < 0 {
- if e := errno(); e != _EBUSY {
- println("runtime: port_alert failed with", e)
- throw("runtime: netpoll: port_alert failed")
- }
+ // Failing to cas indicates there is an in-flight wakeup, so we're done here.
+ if !atomic.Cas(&netpollWakeSig, 0, 1) {
+ return
+ }
+
+ // Use port_alert to put portfd into alert mode.
+ // This will wake up all threads sleeping in port_getn on portfd,
+ // and cause their calls to port_getn to return immediately.
+ // Further, until portfd is taken out of alert mode,
+ // all calls to port_getn will return immediately.
+ if port_alert(portfd, _PORT_ALERT_UPDATE, _POLLHUP, uintptr(unsafe.Pointer(&portfd))) < 0 {
+ if e := errno(); e != _EBUSY {
+ println("runtime: port_alert failed with", e)
+ throw("runtime: netpoll: port_alert failed")
}
}
}
diff --git a/src/runtime/netpoll_windows.go b/src/runtime/netpoll_windows.go
index 4c1cd2633a..7e4664909c 100644
--- a/src/runtime/netpoll_windows.go
+++ b/src/runtime/netpoll_windows.go
@@ -67,11 +67,14 @@ func netpollarm(pd *pollDesc, mode int) {
}
func netpollBreak() {
- if atomic.Cas(&netpollWakeSig, 0, 1) {
- if stdcall4(_PostQueuedCompletionStatus, iocphandle, 0, 0, 0) == 0 {
- println("runtime: netpoll: PostQueuedCompletionStatus failed (errno=", getlasterror(), ")")
- throw("runtime: netpoll: PostQueuedCompletionStatus failed")
- }
+ // Failing to cas indicates there is an in-flight wakeup, so we're done here.
+ if !atomic.Cas(&netpollWakeSig, 0, 1) {
+ return
+ }
+
+ if stdcall4(_PostQueuedCompletionStatus, iocphandle, 0, 0, 0) == 0 {
+ println("runtime: netpoll: PostQueuedCompletionStatus failed (errno=", getlasterror(), ")")
+ throw("runtime: netpoll: PostQueuedCompletionStatus failed")
}
}