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 07:54:02 UTC 2016
    
    
  
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
 
 
 
    
    
More information about the hotspot-runtime-dev
mailing list