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
F13267565: D21199.diff
Wed, May 29, 3:42 AM
F13266347: D21199.id50483.diff
Tue, May 28, 1:05 PM
F13264709: D21199.id50495.diff
Mon, May 27, 8:51 PM
F13264630: D21199.id.diff
Mon, May 27, 7:39 PM
F13259170: D21199.id.diff
Sun, May 26, 5:16 PM
F13256286: D21199.diff
Sat, May 25, 10:57 AM
F13227626: D21199.id50483.diff
Mon, May 20, 4:28 AM
F13220921: D21199.id50495.diff
Sun, May 19, 2:06 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
Lint
Lint Not Applicable
Unit
Tests Not Applicable

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.