RFR[9u-dev]: 8151442: jstack doesn't close quotation marks properly with threads' name greater than 1996 characters
Cheleswer Sahu
cheleswer.sahu at oracle.com
Fri Mar 18 09:58:07 UTC 2016
Thanks Dmitry for review. I will file CR and let you know once done.
Cheleswer
-----Original Message-----
From: Dmitry Samersoff
Sent: Friday, March 18, 2016 2:35 PM
To: Cheleswer Sahu; hotspot-runtime-dev at openjdk.java.net; serviceability-dev at openjdk.java.net
Subject: Re: RFR[9u-dev]: 8151442: jstack doesn't close quotation marks properly with threads' name greater than 1996 characters
Cheleswer,
Fix (as immediate solution) looks good for me.
But IMHO, silent truncation of the output inside output stream is not a correct behavior. So please file a follow-up CR to have it addressed.
-Dmitry
On 2016-03-18 10:54, Cheleswer Sahu wrote:
> Hi,
>
>
>
> Please review the code changes for https://bugs.openjdk.java.net/browse/JDK-8151442.
>
>
>
> Webrev Link: http://cr.openjdk.java.net/~csahu/8151442/
>
>
>
> Bug Brief:
>
> In jstack thread dumps , thread name greater than 1996 characters doesn't close quotation marks properly.
>
>
>
> Problem Identified:
>
> Jstack is using below code to print thread name
>
>
>
> src/share/vm/runtime/thread.cpp
>
> void JavaThread::print_on(outputStream *st) const {
>
> st->print("\"%s\" ", get_thread_name());
>
>
>
> Here "st->print()" internally uses max buffer length as O_BUFLEN (2000).
>
>
>
> void outputStream::do_vsnprintf_and_write_with_automatic_buffer(const char* format, va_list ap, bool add_cr) {
> char buffer[O_BUFLEN];
>
>
>
>
>
> do_vsnprintf_and_write_with_automatic_buffer() finally calls
> "vsnprintf()" which truncates the anything greater than the max
> size(2000). In this case thread's name(> 1996) along with quotation
> marks (2)
>
> plus one terminating character exceeds the max buffer size (2000), therefore the closing quotation marks gets truncated.
>
>
>
>
>
> Solution:
>
> Split the "st->print("\"%s\" ", get_thread_name())" in two statements
>
> 1. st->print("\"%s", get_thread_name());
>
> 2. st->print("\" ");
>
>
>
> This will ensure presence of closing quotation mark always.
>
>
>
>
>
> Regards,
>
> Cheleswer
>
>
>
>
>
>
>
--
Dmitry Samersoff
Oracle Java development team, Saint Petersburg, Russia
* I would love to change the world, but they won't give me the sources.
More information about the serviceability-dev
mailing list