UL: LogStream autoflush?
Thomas Stüfe
thomas.stuefe at gmail.com
Wed Apr 25 05:23:36 UTC 2018
Hi,
I ran into following problem:
(metaspace.cpp)
LogTarget(Trace, gc, metaspace) lt;
if (lt.is_enabled()) {
LogStream ls(lt);
...
vsl->print_on(&ls);
}
I did modify VirtualSpaceNode::print_on() to not print a trailing cr,
since that suits my needs at other places. Then I ran into this
assert:
# Internal Error
(/priv/d031900/openjdk/jdk-jdk/source/src/hotspot/share/logging/logStream.cpp:36),
pid=8827, tid=8828
# assert(_pos == 0) failed: still outstanding bytes in the line buffer
Of course, the simple fix would here to add an ls.cr() at the end of
the LogStream scope. But I find that clumsy: as a caller of
VirtualSpaceNode::print_on(), why should I have care or even know if
the called print_on() function ends with a cr() ?
I also could add an ls.flush() at the end of the scope, but then, why
should I have to think about this?
The point is that LogStream() requires me to end output with a cr()
before it dies, but as an implementator of a print function, I do not
know how long the stream I write into lives. And as a user of
LogStream, I do not want to have to think about this.
I would it find way more convenient if LogStream would just autoflush
at destruction time, treating an unfinished line like a finished line.
Would that make sense to you?
Kind Regards, Thomas
More information about the hotspot-runtime-dev
mailing list