Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Dec 2011 14:50:26 +0700
From:      Max Khon <fjoe@FreeBSD.org>
To:        Alexander Best <arundel@freebsd.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r228157 - head/usr.bin/make
Message-ID:  <CADe0-4mJMTuEjY9Bv0r04ET0eb2hHTZ7WvQGobGsg4XJbXfF%2BA@mail.gmail.com>
In-Reply-To: <CADe0-4keJ=DAUGx_FEqpFinyZUC-VdBkquMLW0wDmFHiW9erbw@mail.gmail.com>
References:  <201111301807.pAUI7cXI008371@svn.freebsd.org> <20111201001646.GA49249@freebsd.org> <CADe0-4=izivfmpC_w%2BahNRNrqv%2B3rwRiEbX4wEr8FaBB0q-N5A@mail.gmail.com> <CADe0-4keJ=DAUGx_FEqpFinyZUC-VdBkquMLW0wDmFHiW9erbw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--00163683411e0d1bb904b3031b21
Content-Type: text/plain; charset=ISO-8859-1

Alexander,

On Thu, Dec 1, 2011 at 12:03 PM, Max Khon <fjoe@freebsd.org> wrote:

it would also be nice, if at some point, somebody could dive into the code
>>> to
>>> see why 'make buildkernel' will let clang produce coloured output, but
>>> 'make -j(N>1) buildkernel' doesn't (and why adding a -B switch to that
>>> command
>>> fixes it).
>>>
>>
>> This one is simple: job make (-jX) runs commands with stdin/stdout/stderr
>> redirected to pipes.
>> -B turns on compat mode for job make.
>>
>> This can be demonstrated by running make with -jX or -jX -B with the
>> following Makefile:
>> --- cut here ---
>> all:
>>         @if [ -t 1 ]; then echo "stdout is a tty"; else echo "stdout is
>> not a tty"; fi
>> --- cut here ---
>>
>> If you really want to see colored output in -jX case you should teach
>> clang to output ANSI color sequences not only in isatty(1) case, but also
>> when MAKE_JOBS_FIFO environment variable is present (it is set when make
>> runs in job mode).
>>
>
> This will not work for the cases when make(1) is itself redirected.
> Something like attached patch should work, but it blocks sometimes in
> "ttyout" state for some reason (needs more work).
>

It hangs when tty_drain() is called when make(1) closes slave pty. Looks
like a race condition there when tty_wait() is called from tty_drain().

If I exchange pty master and slave hangs disappear. So attached patch works
for me.
It may add performance penalty but I think that the impact will be
negligible.

Max

--00163683411e0d1bb904b3031b21
Content-Type: text/x-patch; charset=US-ASCII; name="openpty2.diff"
Content-Disposition: attachment; filename="openpty2.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gvngppto1

SW5kZXg6IHVzci5iaW4vbWFrZS9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB1c3IuYmluL21ha2Uv
TWFrZWZpbGUJKHJldmlzaW9uIDIyODE1NykKKysrIHVzci5iaW4vbWFrZS9NYWtlZmlsZQkod29y
a2luZyBjb3B5KQpAQCAtNyw2ICs3LDggQEAKIFNSQ1M9CWFyY2guYyBidWYuYyBjb25kLmMgZGly
LmMgZm9yLmMgaGFzaC5jIGhhc2hfdGFibGVzLmMgam9iLmMJXAogCWxzdC5jIG1haW4uYyBtYWtl
LmMgcGFyc2UuYyBwcm9jLmMgc2hlbGwuYyBzdHIuYyBzdWZmLmMgdGFyZy5jCVwKIAl1dGlsLmMg
dmFyLmMKK0RQQUREPQkke0xJQlVUSUx9CitMREFERD0JLWx1dGlsCiAKIE5PX1NIQVJFRD89CVlF
UwogCkluZGV4OiB1c3IuYmluL21ha2Uvam9iLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLmJpbi9tYWtl
L2pvYi5jCShyZXZpc2lvbiAyMjgxNTcpCisrKyB1c3IuYmluL21ha2Uvam9iLmMJKHdvcmtpbmcg
Y29weSkKQEAgLTExNSw2ICsxMTUsNyBAQAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8
aW50dHlwZXMuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxsaWJ1dGlsLmg+CiAj
aW5jbHVkZSA8cGF0aHMuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzaWduYWwu
aD4KQEAgLTE3OTgsOCArMTc5OSwxMyBAQAogCQlpZiAodXNlUGlwZXMpIHsKIAkJCWludCBmZFsy
XTsKIAotCQkJaWYgKHBpcGUoZmQpID09IC0xKQotCQkJCVB1bnQoIkNhbm5vdCBjcmVhdGUgcGlw
ZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJaWYgKGlzYXR0eSgxKSkgeworCQkJCWlmIChv
cGVucHR5KGZkICsgMSwgZmQgKyAwLCBOVUxMLCBOVUxMLCBOVUxMKSA9PSAtMSkKKwkJCQkJUHVu
dCgiQ2Fubm90IG9wZW4gcHR5OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQl9IGVsc2Ugewor
CQkJCWlmIChwaXBlKGZkKSA9PSAtMSkKKwkJCQkJUHVudCgiQ2Fubm90IGNyZWF0ZSBwaXBlOiAl
cyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQl9CiAJCQlqb2ItPmluUGlwZSA9IGZkWzBdOwogCQkJ
am9iLT5vdXRQaXBlID0gZmRbMV07CiAJCQlmY250bChqb2ItPmluUGlwZSwgRl9TRVRGRCwgMSk7
Cg==
--00163683411e0d1bb904b3031b21--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CADe0-4mJMTuEjY9Bv0r04ET0eb2hHTZ7WvQGobGsg4XJbXfF%2BA>