bhyveload: add a small ring buffer to the cb_putc function.#2226
Open
yuichiro-naito wants to merge 1 commit into
Open
bhyveload: add a small ring buffer to the cb_putc function.#2226yuichiro-naito wants to merge 1 commit into
yuichiro-naito wants to merge 1 commit into
Conversation
4b86806 to
1198cab
Compare
The console output descriptor is NONBLOCK. It often returns EAGIN when the console connects to nmdm(4). The cb_putc should buffer the output characters and retry writing. If the buffer becomes full, the first character will be discarded. Signed-off-by: Yuichiro NAITO <naito.yuichiro@gmail.com>
1198cab to
3c930ec
Compare
Contributor
Author
|
I found that the |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
While bhyveload opens an nmdm device as a console, I often see that the boot loader messages are partly missing on my console. I investigated the bhyloveload with truss(1), I found that write(2) system call returns EGAIN while missing the message. The console output descriptor is opened with O_NONBLOCK. So, the write(2) system call may return the EAGAIN. It is described in the manual. An application should accept and handle the error case.
I added a small ring buffer for the output characters and retry writing in the error case. I see about 150 characters are missing with my debug message, so the 256-byte buffer is enough for me.