Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix stdin pipe is being closed exception on Windows for large .proto files #2153

Merged
merged 6 commits into from
Jun 4, 2024
Merged

Fix stdin pipe is being closed exception on Windows for large .proto files #2153

merged 6 commits into from
Jun 4, 2024

Conversation

azam
Copy link
Contributor

@azam azam commented Jun 1, 2024

Summary

This fixes #2147.

ProcessRunner closes the stdin stream on execution which throws an IOException with Pipe is being closed message on Windows for protobuf files slightly larger than 4100 bytes. This fix removes the OutputStream#close() call on ProcessRunner, but this should not affect current behavior, since the file descriptor and stream for stdin will be closed when the process is destroyed (unix,windows).

Also added a test with a dirty .proto file that is slightly over 4100 bytes.


Please DO NOT FORCE PUSH. Don't worry about messy history, it's easier to do code review if we can tell what happened after the review, and force pushing breaks that.

Please make sure that your PR allows edits from maintainers. Sometimes it's faster for us to just fix something than it is to describe how to fix it.

Allow edits from maintainers

After creating the PR, please add a commit that adds a bullet-point under the [Unreleased] section of CHANGES.md, plugin-gradle/CHANGES.md, and plugin-maven/CHANGES.md which includes:

  • a summary of the change
  • either
    • a link to the issue you are resolving (for small changes)
    • a link to the PR you just created (for big changes likely to have discussion)

If your change only affects a build plugin, and not the lib, then you only need to update the plugin-foo/CHANGES.md for that plugin.

If your change affects lib in an end-user-visible way (fixing a bug, updating a version) then you need to update CHANGES.md for both the lib and all build plugins. Users of a build plugin shouldn't have to refer to lib to see changes that affect them.

This makes it easier for the maintainers to quickly release your changes :)

@nedtwigg nedtwigg disabled auto-merge June 4, 2024 07:44
@nedtwigg
Copy link
Member

nedtwigg commented Jun 4, 2024

I killed CI after 36 minutes, usually the tests complete in ~15 minutes.

Try running ./gradlew build locally. I'm seeing that BiomeStep and NativeCmdStep are hanging as a result of the original change. I just pushed up a PR which calls a flush instead of close, we'll see how it does.

@nedtwigg
Copy link
Member

nedtwigg commented Jun 4, 2024

Stopped tests after 20 minutes this time.

@nedtwigg
Copy link
Member

nedtwigg commented Jun 4, 2024

Seems that the close() is important. Maybe just calling flush() before the close() will solve your issue. Good thing you added a test, and good thing we run our tests on Windows! https://stackoverflow.com/a/56013102/24181017

@nedtwigg nedtwigg enabled auto-merge June 4, 2024 08:09
@nedtwigg nedtwigg merged commit 0c428c7 into diffplug:main Jun 4, 2024
14 checks passed
@azam
Copy link
Contributor Author

azam commented Jun 4, 2024

Nice find! My bad that I should have run the full test suite 😅
Thank you for your time working on this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Running check/apply with buf on Windows fails for files slightly over 4100 bytes
2 participants