diff --git a/indra/llcommon/llprocess.cpp b/indra/llcommon/llprocess.cpp index edfdebfe872b2b3f6d564a2bf8767caa9bf2b779..8ccd39152b42ee268fb90c6ec21564f85fdbe6e4 100644 --- a/indra/llcommon/llprocess.cpp +++ b/indra/llcommon/llprocess.cpp @@ -145,6 +145,15 @@ class WritePipeImpl: public LLProcess::WritePipe mConnection = LLEventPumps::instance().obtain("mainloop") .listen(LLEventPump::inventName("WritePipe"), boost::bind(&WritePipeImpl::tick, this, _1)); + +#if ! LL_WINDOWS + // We can't count on every child process reading everything we try to + // write to it. And if the child terminates with WritePipe data still + // pending, unless we explicitly suppress it, Posix will hit us with + // SIGPIPE. That would terminate the viewer, boom. "Ignoring" it means + // APR gets the correct errno, passes it back to us, we log it, etc. + signal(SIGPIPE, SIG_IGN); +#endif } virtual std::ostream& get_ostream() { return mStream; }