--- old/src/share/classes/java/lang/Throwable.java 2011-04-28 13:06:50.000000000 -0700 +++ new/src/share/classes/java/lang/Throwable.java 2011-04-28 13:06:50.000000000 -0700 @@ -958,18 +958,15 @@ // trace field is a valid value indicating the stack trace // should not be set. getOurStackTrace(); - ObjectOutputStream.PutField fields = s.putFields(); - fields.put("detailMessage", detailMessage); - fields.put("cause", cause); - // Serialize a null stacktrace using the stack trace sentinel. - if (stackTrace == null) - fields.put("stackTrace", SentinelHolder.STACK_TRACE_SENTINEL); - else - fields.put("stackTrace", stackTrace); - fields.put("suppressedExceptions", suppressedExceptions); - - s.writeFields(); + StackTraceElement[] oldStackTrace = stackTrace; + try { + if (stackTrace == null) + stackTrace = SentinelHolder.STACK_TRACE_SENTINEL; + s.defaultWriteObject(); + } finally { + stackTrace = oldStackTrace; + } } /**