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.