Code review request for 8012044: Give more information about self-suppression from Throwable.addSuppressed

Zhong Yu zhong.j.yu at gmail.com
Fri Apr 12 03:58:12 UTC 2013


It doesn't feel very right to say the exception is the "cause" of the IAE.

If the user code reuses an exception instance "x", as reported by OP,
there is a possibility that the IAE is later added as a suppressed
exception to "x", forming a loop x->IAE->x.

Zhong Yu


On Thu, Apr 11, 2013 at 8:19 PM, Joe Darcy <joe.darcy at oracle.com> wrote:
> Hello,
>
> Please review the patch below to address
>
>     8012044: Give more information about self-suppression from
> Throwable.addSuppressed
>     http://cr.openjdk.java.net/~darcy/8012044.0/
>
> Thanks,
>
> -Joe
>
> diff -r 006a7a576fe9 src/share/classes/java/lang/Throwable.java
> --- a/src/share/classes/java/lang/Throwable.java    Thu Apr 11 12:22:23 2013
> +0900
> +++ b/src/share/classes/java/lang/Throwable.java    Thu Apr 11 18:16:38 2013
> -0700
> @@ -1039,7 +1039,7 @@
>       */
>      public final synchronized void addSuppressed(Throwable exception) {
>          if (exception == this)
> -            throw new IllegalArgumentException(SELF_SUPPRESSION_MESSAGE);
> +            throw new IllegalArgumentException(SELF_SUPPRESSION_MESSAGE,
> exception);
>
>          if (exception == null)
>              throw new NullPointerException(NULL_CAUSE_MESSAGE);
> diff -r 006a7a576fe9 test/java/lang/Throwable/SuppressedExceptions.java
> --- a/test/java/lang/Throwable/SuppressedExceptions.java    Thu Apr 11
> 12:22:23 2013 +0900
> +++ b/test/java/lang/Throwable/SuppressedExceptions.java    Thu Apr 11
> 18:16:38 2013 -0700
> @@ -26,7 +26,7 @@
>
>  /*
>   * @test
> - * @bug     6911258 6962571 6963622 6991528 7005628
> + * @bug     6911258 6962571 6963622 6991528 7005628 8012044
>   * @summary Basic tests of suppressed exceptions
>   * @author  Joseph D. Darcy
>   */
> @@ -48,7 +48,9 @@
>              throwable.addSuppressed(throwable);
>              throw new RuntimeException("IllegalArgumentException for
> self-suppresion not thrown.");
>          } catch (IllegalArgumentException iae) {
> -            ; // Expected
> +            // Expected to be here
> +            if (iae.getCause() != throwable)
> +                throw new RuntimeException("Bad cause after
> self-suppresion.");
>          }
>      }
>
>
> -Joe



More information about the core-libs-dev mailing list