comparison src/share/vm/utilities/ostream.cpp @ 11136:dbc0b5dc08f5

7143807: ResourceMark nesting problem in stringStream Reviewed-by: kvn, dcubed
author fparain
date Wed, 10 Jul 2013 15:49:15 +0000
parents 0598674c0056
children 6b0fd0964b87 621eda7235d2 01b268b3080a bdd155477289
comparison
equal deleted inserted replaced
11105:22baec423e2f 11136:dbc0b5dc08f5
294 stringStream::stringStream(size_t initial_size) : outputStream() { 294 stringStream::stringStream(size_t initial_size) : outputStream() {
295 buffer_length = initial_size; 295 buffer_length = initial_size;
296 buffer = NEW_RESOURCE_ARRAY(char, buffer_length); 296 buffer = NEW_RESOURCE_ARRAY(char, buffer_length);
297 buffer_pos = 0; 297 buffer_pos = 0;
298 buffer_fixed = false; 298 buffer_fixed = false;
299 DEBUG_ONLY(rm = Thread::current()->current_resource_mark();)
299 } 300 }
300 301
301 // useful for output to fixed chunks of memory, such as performance counters 302 // useful for output to fixed chunks of memory, such as performance counters
302 stringStream::stringStream(char* fixed_buffer, size_t fixed_buffer_size) : outputStream() { 303 stringStream::stringStream(char* fixed_buffer, size_t fixed_buffer_size) : outputStream() {
303 buffer_length = fixed_buffer_size; 304 buffer_length = fixed_buffer_size;
319 // increase to the requested size. 320 // increase to the requested size.
320 if (end < buffer_length * 2) { 321 if (end < buffer_length * 2) {
321 end = buffer_length * 2; 322 end = buffer_length * 2;
322 } 323 }
323 char* oldbuf = buffer; 324 char* oldbuf = buffer;
325 assert(rm == NULL || Thread::current()->current_resource_mark() == rm,
326 "stringStream is re-allocated with a different ResourceMark");
324 buffer = NEW_RESOURCE_ARRAY(char, end); 327 buffer = NEW_RESOURCE_ARRAY(char, end);
325 strncpy(buffer, oldbuf, buffer_pos); 328 strncpy(buffer, oldbuf, buffer_pos);
326 buffer_length = end; 329 buffer_length = end;
327 } 330 }
328 } 331 }