aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAyke van Laethem <[email protected]>2024-11-19 11:15:53 +0100
committerAyke <[email protected]>2024-11-19 11:58:07 +0100
commit2d26b6cc8dd9b9bb81274e29335790f9b2682e7c (patch)
tree4e3c3ca2fa8b8584da4aba6fb374862623f01a28
parent0087d4c6bf13a1bac648b0e61459d717bae87b02 (diff)
downloadtinygo-2d26b6cc8dd9b9bb81274e29335790f9b2682e7c.tar.gz
tinygo-2d26b6cc8dd9b9bb81274e29335790f9b2682e7c.zip
windows: don't return, exit via exit(0) instead
This fixes a bug where output would not actually be written to stdout before exiting the process, leading to a flaky Windows CI. Exiting using `exit(0)` appears to fix this. For some background, see: https://github.com/tinygo-org/tinygo/pull/4589
-rw-r--r--src/runtime/runtime_windows.go11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/runtime/runtime_windows.go b/src/runtime/runtime_windows.go
index 4b0b8f65b..88857fc3a 100644
--- a/src/runtime/runtime_windows.go
+++ b/src/runtime/runtime_windows.go
@@ -52,7 +52,16 @@ func mainCRTStartup() int {
stackTop = getCurrentStackPointer()
runMain()
- // For libc compatibility.
+ // Exit via exit(0) instead of returning. This matches
+ // mingw-w64-crt/crt/crtexe.c, which exits using exit(0) instead of
+ // returning the return value.
+ // Exiting this way (instead of returning) also fixes an issue where not all
+ // output would be sent to stdout before exit.
+ // See: https://github.com/tinygo-org/tinygo/pull/4589
+ libc_exit(0)
+
+ // Unreachable, since we've already exited. But we need to return something
+ // here to make this valid Go code.
return 0
}