RFR(S): 8149557: Resource mark breaks printing to string stream

Lindenmaier, Goetz goetz.lindenmaier at sap.com
Thu Feb 11 08:24:15 UTC 2016


Hi

Please review this change. I please need a sponsor.
http://cr.openjdk.java.net/~goetz/wr16/8149557-ResMrk/webrev.01/

If a stringStream is passed to Symbol::print_symbol_on(),
assertion "stringStream is re-allocated with a different ResourceMark." can fire in stringStream::write(const char* s, size_t len).
This can be verified by running TestLogTouchedMethods.java after adding the patch below to the VM.

My fix copies the string to locally managed memory before popping the ResoreceMark.
A better solution would be to guarantee enough space on the stream
before doing the resource mark, but outputStream has no such
method as 'ensureCapacity' or the like.
Alternatively the ResourceMark could be skipped altogether.
But then the aux memory used remains on the ResourceArea too long.
Also, various ResourceMarks have to be added in other places.

Best regards,
  Goetz.


--- a/src/share/vm/runtime/java.cpp     Wed Jan 13 11:33:21 2016 +0100
+++ b/src/share/vm/runtime/java.cpp     Wed Feb 10 08:56:14 2016 +0100
@@ -340,7 +340,10 @@
   }

   if (LogTouchedMethods && PrintTouchedMethodsAtExit) {
-    Method::print_touched_methods(tty);
+    ResourceMark rm;
+    stringStream st(16);
+    Method::print_touched_methods(&st);
+    tty->print("%s", st.as_string());
   }

   if (PrintBiasedLockingStatistics) {


More information about the hotspot-runtime-dev mailing list