+When writing to a closed pipe, which happens with simple
+
+ seq 99999 | grep -v xxx | head -1
+
+the write() function will return an EPIPE error. The kernel also sends
+SIGPIPE to the process, which by default kills it.
+
+As the signal delivery is not immediate, grep may see EPIPE and report
+it as an error, which is annoying, especially on Android where this
+timing issue is encountered a lot more.
+
+See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=23267 where it has
+been suggested to silently ignore EPIPE. That was in the context of
+SIGPIPE being ignored, but this should probably also been done to
+avoid timing issues. Feedback has been sent to the above issue and
+is awaiting mailing list approval.
+
+diff -u -r ../grep-2.25/src/grep.c ./src/grep.c
+--- ../grep-2.25/src/grep.c 2016-04-02 20:45:51.000000000 -0400
++++ ./src/grep.c 2016-04-23 06:41:54.419351897 -0400
+@@ -1234,8 +1234,13 @@
+ if (line_buffered)
+ fflush_errno ();
+
+- if (stdout_errno)
+- error (EXIT_TROUBLE, stdout_errno, _("write error"));
++ if (stdout_errno) {
++ if (stdout_errno == EPIPE) {
++ exit (EXIT_SUCCESS);
++ } else {
++ error (EXIT_TROUBLE, stdout_errno, _("write error"));
++ }
++ }
+
+ lastout = lim;
+ }