< prev index next >

src/share/vm/logging/logTagSet.cpp

Print this page
rev 10979 : 8140594: Various minor code improvements (compiler)

@@ -102,16 +102,21 @@
   char buf[vwrite_buffer_size];
   va_list saved_args;           // For re-format on buf overflow.
   va_copy(saved_args, args);
   size_t prefix_len = _write_prefix(buf, sizeof(buf));
   // Check that string fits in buffer; resize buffer if necessary
-  int ret = os::log_vsnprintf(buf + prefix_len, sizeof(buf) - prefix_len, fmt, args);
+  int ret;
+  if (prefix_len < vwrite_buffer_size) {
+    ret = os::log_vsnprintf(buf + prefix_len, sizeof(buf) - prefix_len, fmt, args);
+  } else {
+    ret = prefix_len + os::log_vsnprintf(buf, sizeof(buf), fmt, args);
+  }
   assert(ret >= 0, "Log message buffer issue");
   if ((size_t)ret >= sizeof(buf)) {
     size_t newbuf_len = prefix_len + ret + 1;
     char* newbuf = NEW_C_HEAP_ARRAY(char, newbuf_len, mtLogging);
-    memcpy(newbuf, buf, prefix_len);
+    prefix_len = _write_prefix(newbuf, newbuf_len);
     ret = os::log_vsnprintf(newbuf + prefix_len, newbuf_len - prefix_len, fmt, saved_args);
     assert(ret >= 0, "Log message buffer issue");
     log(level, newbuf);
     FREE_C_HEAP_ARRAY(char, newbuf);
   } else {
< prev index next >