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<[email protected]>
---
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 [email protected]
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html