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)
Sun, Nov 17, 7:32 PM
Unknown Object (File)
Thu, Nov 14, 12:49 PM
Unknown Object (File)
Sun, Nov 10, 10:14 AM
Unknown Object (File)
Wed, Nov 6, 3:47 AM
Unknown Object (File)
Oct 23 2024, 2:53 AM
Unknown Object (File)
Oct 22 2024, 5:47 PM
Unknown Object (File)
Oct 18 2024, 4:20 PM
Unknown Object (File)
Oct 11 2024, 11:04 AM
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.