Page MenuHomePhabricator

When recent PHP raises a "broken pipe" error in ExecFuture, treat it as a blocked stdin
ClosedPublic

Authored by epriestley on May 1 2020, 2:10 PM.
Tags
None
Referenced Files
Unknown Object (File)
Mon, Jun 16, 6:48 PM
Unknown Object (File)
Apr 29 2025, 9:33 AM
Unknown Object (File)
Apr 28 2025, 5:55 AM
Unknown Object (File)
Apr 15 2025, 12:25 PM
Unknown Object (File)
Apr 11 2025, 2:04 PM
Unknown Object (File)
Apr 11 2025, 2:03 PM
Unknown Object (File)
Apr 11 2025, 2:03 PM
Unknown Object (File)
Apr 11 2025, 2:03 PM
Subscribers
None

Details

Summary

Ref T13528. If we start a subprocess that immediately exits and then write to it, we can get a broken pipe error.

Recent versions of PHP appear to raise this as an actual warning, and recent changes upgrade the warning to a runtime exception.

I can't find any way to tell if the RuntimeException is a broken pipe or something else, except by examining the text of the error string.

At least for now, treat this like a "blocked pipe" condition. Since the subprocess has exited and the bytes didn't write, this should generally be reasonable.

Test Plan
  • Viewed a file in Paste with an extension that Pygments does not have a lexer for.
  • This causes Pygments to exit immediately with an "unrecognized lexer" error. This closes the pipe, and the next write will fail with a broken pipe error.
  • Before patch: fatal on broken pipe.
  • After patch: clean resolution of the future and error condition.

Diff Detail

Repository
rARC Arcanist
Branch
future2
Lint
Lint Passed
Unit
Tests Passed
Build Status
Buildable 24298
Build 33473: Run Core Tests
Build 33472: arc lint + arc unit

Event Timeline

This revision was not accepted when it landed; it landed in state Needs Review.May 1 2020, 4:12 PM
This revision was automatically updated to reflect the committed changes.