From: Yevgeny Kliteynik <kliteyn-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
To: Sasha Khapyorsky <sashak-smomgflXvOZWk0Htik3J/w@public.gmane.org>
Cc: Linux RDMA <linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: opensm/main.c: foce stdout to be line-buffered
Date: Tue, 23 Mar 2010 14:25:34 +0200 [thread overview]
Message-ID: <4BA8B33E.8000003@dev.mellanox.co.il> (raw)
In-Reply-To: <20100323103733.GD4808@me>
Hi Sasha,
On 23/Mar/10 12:37, Sasha Khapyorsky wrote:
> Hi Yevgeny,
>
> On 10:26 Wed 03 Mar , Yevgeny Kliteynik wrote:
>> When stdout is assigned to a terminal, it is line-buffered.
>> But when opensm's stdout is redirected to a file, stdout
>> becomes block-buffered, which means that '\n' won't cause
>> the buffer to be flushed.
>
> Such redirection happens in daemon mode. Another case would be
> 'opensm> somefile '. Where do you see the problem?
The problematic case is 'opensm > somefile'.
> Would '-d2' option be related to the issue?
'-d2' refers to the log file, I'm talking about
printf to stdout.
>>
>> Forcing stdout to always be line-buffered.
>>
>> Signed-off-by: Yevgeny Kliteynik<kliteyn-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
>> ---
>> opensm/opensm/main.c | 3 +++
>> 1 files changed, 3 insertions(+), 0 deletions(-)
>>
>> diff --git a/opensm/opensm/main.c b/opensm/opensm/main.c
>> index f9a33af..5ea65dd 100644
>> --- a/opensm/opensm/main.c
>> +++ b/opensm/opensm/main.c
>> @@ -613,6 +613,9 @@ int main(int argc, char *argv[])
>> {NULL, 0, NULL, 0} /* Required at the end of the array */
>> };
>>
>> + /* force stdout to be line-buffered */
>> + setlinebuf(stdout);
>
> What about stderr?
stderr is always unbuffered, no matter where
is stderr actually assigned to.
> IOW describe your problem in more details (see above).
I'm running "opensm > somefile", and I don't see SM's stdout
(such as "SUBNET UP" message, or new cached options after SIGHUP),
because when stdout is assigned to file and not terminal, it is
handled differently. Instead of flushing on printing '\n',
it becomes buffered, which means that you don't control when
is this buffer flushed.
My fix forces stdout to always flush stdout when printing '\n'.
It has no effect when stdout is assigned to terminal, and it
changes buffering when SM's stdout is redirected.
More details about stdout/stderr buffering:
http://www.pixelbeat.org/programming/stdio_buffering/
-- Yevgeny
> Sasha
>
>> +
>> /* Make sure that the opensm and complib were compiled using
>> same modes (debug/free) */
>> if (osm_is_debug() != cl_is_debug()) {
>> --
>> 1.5.1.4
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
>> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2010-03-23 12:25 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-03 8:26 opensm/main.c: foce stdout to be line-buffered Yevgeny Kliteynik
[not found] ` <4B8E1D46.4090106-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2010-03-23 10:37 ` Sasha Khapyorsky
2010-03-23 12:25 ` Yevgeny Kliteynik [this message]
[not found] ` <4BA8B33E.8000003-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2010-03-23 16:37 ` Sasha Khapyorsky
2010-03-23 21:36 ` Yevgeny Kliteynik
[not found] ` <4BA9344A.6010007-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2010-03-24 7:09 ` Yevgeny Kliteynik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4BA8B33E.8000003@dev.mellanox.co.il \
--to=kliteyn-ldsdmyg8hgv8yrgs2mwiifqbs+8scbdb@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=sashak-smomgflXvOZWk0Htik3J/w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox