From 9bddb80a5e2e5e0e8a3ceec3b3c701425160cf5c Mon Sep 17 00:00:00 2001 From: pchelko Date: Mon, 21 Jul 2014 21:41:11 +0400 Subject: [PATCH] 8046884: JNI exception pending in jdk/src/solaris/native/sun/java2d/x11: X11PMPLitLoops.c, X11SurfaceData.c Reviewed-by: prr, serb --- .../native/sun/java2d/x11/X11PMBlitLoops.c | 19 ++++++++++++++----- .../native/sun/java2d/x11/X11SurfaceData.c | 18 +++++++++++++++--- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/solaris/native/sun/java2d/x11/X11PMBlitLoops.c b/src/solaris/native/sun/java2d/x11/X11PMBlitLoops.c index 6b35df414..c94d58b8a 100644 --- a/src/solaris/native/sun/java2d/x11/X11PMBlitLoops.c +++ b/src/solaris/native/sun/java2d/x11/X11PMBlitLoops.c @@ -241,9 +241,12 @@ Java_sun_java2d_x11_X11PMBlitLoops_updateBitmask width, height, 1); if (xsdo->bitmask == 0) { AWT_UNLOCK(); - JNU_ThrowOutOfMemoryError(env, - "Cannot create bitmask for " - "offscreen surface"); + if (!(*env)->ExceptionCheck(env)) + { + JNU_ThrowOutOfMemoryError(env, + "Cannot create bitmask for " + "offscreen surface"); + } return; } } @@ -253,7 +256,10 @@ Java_sun_java2d_x11_X11PMBlitLoops_updateBitmask 1, XYBitmap, 0, NULL, width, height, 32, 0); if (image == NULL) { AWT_UNLOCK(); - JNU_ThrowOutOfMemoryError(env, "Cannot allocate bitmask for mask"); + if (!(*env)->ExceptionCheck(env)) + { + JNU_ThrowOutOfMemoryError(env, "Cannot allocate bitmask for mask"); + } return; } dstScan = image->bytes_per_line; @@ -261,7 +267,10 @@ Java_sun_java2d_x11_X11PMBlitLoops_updateBitmask if (image->data == NULL) { XFree(image); AWT_UNLOCK(); - JNU_ThrowOutOfMemoryError(env, "Cannot allocate bitmask for mask"); + if (!(*env)->ExceptionCheck(env)) + { + JNU_ThrowOutOfMemoryError(env, "Cannot allocate bitmask for mask"); + } return; } pDst = (unsigned char *)image->data; diff --git a/src/solaris/native/sun/java2d/x11/X11SurfaceData.c b/src/solaris/native/sun/java2d/x11/X11SurfaceData.c index fd48e42cf..1f3e92db0 100644 --- a/src/solaris/native/sun/java2d/x11/X11SurfaceData.c +++ b/src/solaris/native/sun/java2d/x11/X11SurfaceData.c @@ -454,6 +454,7 @@ jboolean XShared_initSurface(JNIEnv *env, X11SDOps *xsdo, jint depth, jint width AWT_LOCK(); xsdo->drawable = X11SD_CreateSharedPixmap(xsdo); AWT_UNLOCK(); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); if (xsdo->drawable) { xsdo->shmPMData.usingShmPixmap = JNI_TRUE; xsdo->shmPMData.shmPixmap = xsdo->drawable; @@ -469,6 +470,7 @@ jboolean XShared_initSurface(JNIEnv *env, X11SDOps *xsdo, jint depth, jint width xsdo->configData->awt_visInfo.screen), width, height, depth); AWT_UNLOCK(); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); #ifdef MITSHM xsdo->shmPMData.usingShmPixmap = JNI_FALSE; xsdo->shmPMData.pixmap = xsdo->drawable; @@ -504,6 +506,7 @@ Java_sun_java2d_x11_X11SurfaceData_initSurface(JNIEnv *env, jclass xsd, if (xsdo->configData->awt_cmap == (Colormap)NULL) { awtJNI_CreateColorData(env, xsdo->configData, 1); + JNU_CHECK_EXCEPTION(env); } /* color_data will be initialized in awtJNI_CreateColorData for 8-bit visuals */ @@ -805,7 +808,10 @@ static jint X11SD_Lock(JNIEnv *env, xsdo->cData->awt_icmLUT == NULL)) { AWT_UNLOCK(); - JNU_ThrowNullPointerException(env, "colormap lookup table"); + if (!(*env)->ExceptionCheck(env)) + { + JNU_ThrowNullPointerException(env, "colormap lookup table"); + } return SD_FAILURE; } if ((lockflags & SD_LOCK_INVCOLOR) != 0 && @@ -816,7 +822,10 @@ static jint X11SD_Lock(JNIEnv *env, xsdo->cData->img_oda_blue == NULL)) { AWT_UNLOCK(); - JNU_ThrowNullPointerException(env, "inverse colormap lookup table"); + if (!(*env)->ExceptionCheck(env)) + { + JNU_ThrowNullPointerException(env, "inverse colormap lookup table"); + } return SD_FAILURE; } if ((lockflags & SD_LOCK_INVGRAY) != 0 && @@ -824,7 +833,10 @@ static jint X11SD_Lock(JNIEnv *env, xsdo->cData->pGrayInverseLutData == NULL)) { AWT_UNLOCK(); - JNU_ThrowNullPointerException(env, "inverse gray lookup table"); + if (!(*env)->ExceptionCheck(env)) + { + JNU_ThrowNullPointerException(env, "inverse gray lookup table"); + } return SD_FAILURE; } if (xsdo->dgaAvailable && (lockflags & (SD_LOCK_RD_WR))) { -- GitLab