Hello,
I just ported my chess engine from 0.15.2 to 0.16 and noticed that exitting an infinite loop that reads stdin writes to console error.Unexpected NTSTATUS=0x101 (ALERTED)
This happens on windows, and I use
var stdin_buffer: [16 * 1024]u8 = undefined;
var stdin_reader: std.Io.File.Reader = std.Io.File.stdin().readerStreaming(init.io, &stdin_buffer);
const stdin: *std.Io.Reader = &stdin_reader.interface;
while (true) {
const line: []u8 = try stdin.takeDelimiter('\n') orelse break;
_ = line;
}
I put this directly into the main to make sure I wasn’t improperly handling errors.
This does not happen if i remove the takeDelimiter line
Any idea why this happens?
I’m not sure I understand what you’re asking. What did you expect the output would be? A different error?
Waits and APCs - Windows drivers | Microsoft Learn
Simply put, your program is waiting to read new content from stdin, but ctrl-c intterupts the waiting state. The program considers ctrl-c more urgent, so it can only return STATUS_ALERTED.
Hitting an unexpected status is basically always an opportunity to improve the standard library. My suggestion would be:
- Compile in debug mode to get a stack trace along with the
error.Unexpected NTSTATUS info
- Open an issue with the reproduction steps and the stack trace
- If you’re up for it (and you have an idea what the fix should be), open a PR with the change
(if the fix is obvious, then you can just skip to making a PR)
3 Likes
error.Unexpected is not part of the return of takeDelimiter() so if it comes from here it cannot be caught.
Its make sense that something has to be done in the std
1 Like