# HG changeset patch # User jchen # Date 1380831391 25200 # Node ID 8fab9959a1bc9c5ca5fe7f1649b32872892058e7 # Parent 549b20d825873fede49c4c743dcb36416a5194e2 8025280: [parfait] warnings from b107 for jdk.src.share.native.sun.java2d.loops: JNI exception pending, JNI critical region violation Reviewed-by: prr, jgodinez diff -r 549b20d82587 -r 8fab9959a1bc jdk/src/share/native/sun/java2d/loops/Blit.c --- a/jdk/src/share/native/sun/java2d/loops/Blit.c Thu Oct 03 11:28:37 2013 +0400 +++ b/jdk/src/share/native/sun/java2d/loops/Blit.c Thu Oct 03 13:16:31 2013 -0700 @@ -60,8 +60,11 @@ } srcOps = SurfaceData_GetOps(env, srcData); + if (srcOps == 0) { + return; + } dstOps = SurfaceData_GetOps(env, dstData); - if (srcOps == 0 || dstOps == 0) { + if (dstOps == 0) { return; } diff -r 549b20d82587 -r 8fab9959a1bc jdk/src/share/native/sun/java2d/loops/BlitBg.c --- a/jdk/src/share/native/sun/java2d/loops/BlitBg.c Thu Oct 03 11:28:37 2013 +0400 +++ b/jdk/src/share/native/sun/java2d/loops/BlitBg.c Thu Oct 03 13:16:31 2013 -0700 @@ -60,8 +60,11 @@ } srcOps = SurfaceData_GetOps(env, srcData); + if (srcOps == 0) { + return; + } dstOps = SurfaceData_GetOps(env, dstData); - if (srcOps == 0 || dstOps == 0) { + if (dstOps == 0) { return; } diff -r 549b20d82587 -r 8fab9959a1bc jdk/src/share/native/sun/java2d/loops/DrawPath.c --- a/jdk/src/share/native/sun/java2d/loops/DrawPath.c Thu Oct 03 11:28:37 2013 +0400 +++ b/jdk/src/share/native/sun/java2d/loops/DrawPath.c Thu Oct 03 13:16:31 2013 -0700 @@ -75,7 +75,8 @@ CompositeInfo compInfo; jint ret; NativePrimitive *pPrim = GetNativePrim(env, self); - jint stroke = (*env)->GetIntField(env, sg2d, sg2dStrokeHintID); + jint stroke; + jboolean throwExc = JNI_FALSE; if (pPrim == NULL) { return; @@ -84,6 +85,8 @@ GrPrim_Sg2dGetCompInfo(env, sg2d, pPrim, &compInfo); } + stroke = (*env)->GetIntField(env, sg2d, sg2dStrokeHintID); + sdOps = SurfaceData_GetOps(env, sData); if (sdOps == 0) { return; @@ -112,6 +115,10 @@ maxCoords = (*env)->GetArrayLength(env, coordsArray); coords = (jfloat*)(*env)->GetPrimitiveArrayCritical( env, coordsArray, NULL); + if (coords == NULL) { + SurfaceData_InvokeUnlock(env, sdOps, &rasInfo); + return; + } if (ret == SD_SLOWLOCK) { GrPrim_RefineBounds(&rasInfo.bounds, transX, transY, @@ -157,22 +164,29 @@ drawHandler.yMax = rasInfo.bounds.y2; drawHandler.pData = &dHData; - if (!doDrawPath(&drawHandler, NULL, transX, transY, - coords, maxCoords, types, numTypes, - (stroke == sunHints_INTVAL_STROKE_PURE)? - PH_STROKE_PURE : PH_STROKE_DEFAULT)) - { - JNU_ThrowArrayIndexOutOfBoundsException(env, - "coords array"); + if (types != NULL) { + if (!doDrawPath(&drawHandler, NULL, transX, transY, + coords, maxCoords, types, numTypes, + (stroke == sunHints_INTVAL_STROKE_PURE)? + PH_STROKE_PURE : PH_STROKE_DEFAULT)) + { + throwExc = JNI_TRUE; + } + + (*env)->ReleasePrimitiveArrayCritical(env, typesArray, types, + JNI_ABORT); } - - (*env)->ReleasePrimitiveArrayCritical(env, typesArray, types, - JNI_ABORT); } } SurfaceData_InvokeRelease(env, sdOps, &rasInfo); } (*env)->ReleasePrimitiveArrayCritical(env, coordsArray, coords, JNI_ABORT); + + if (throwExc) { + JNU_ThrowArrayIndexOutOfBoundsException(env, + "coords array"); + } + SurfaceData_InvokeUnlock(env, sdOps, &rasInfo); } diff -r 549b20d82587 -r 8fab9959a1bc jdk/src/share/native/sun/java2d/loops/DrawPolygons.c --- a/jdk/src/share/native/sun/java2d/loops/DrawPolygons.c Thu Oct 03 11:28:37 2013 +0400 +++ b/jdk/src/share/native/sun/java2d/loops/DrawPolygons.c Thu Oct 03 13:16:31 2013 -0700 @@ -186,10 +186,15 @@ } xPointsPtr = (*env)->GetPrimitiveArrayCritical(env, xPointsArray, NULL); - yPointsPtr = (*env)->GetPrimitiveArrayCritical(env, yPointsArray, NULL); - if (!xPointsPtr || !yPointsPtr) { + if (!xPointsPtr) { ok = JNI_FALSE; } + if (ok) { + yPointsPtr = (*env)->GetPrimitiveArrayCritical(env, yPointsArray, NULL); + if (!yPointsPtr) { + ok = JNI_FALSE; + } + } } if (ok) { diff -r 549b20d82587 -r 8fab9959a1bc jdk/src/share/native/sun/java2d/loops/FillPath.c --- a/jdk/src/share/native/sun/java2d/loops/FillPath.c Thu Oct 03 11:28:37 2013 +0400 +++ b/jdk/src/share/native/sun/java2d/loops/FillPath.c Thu Oct 03 13:16:31 2013 -0700 @@ -64,7 +64,8 @@ CompositeInfo compInfo; jint ret; NativePrimitive *pPrim = GetNativePrim(env, self); - jint stroke = (*env)->GetIntField(env, sg2d, sg2dStrokeHintID); + jint stroke; + jboolean throwExc = JNI_FALSE; if (pPrim == NULL) { return; @@ -73,6 +74,8 @@ GrPrim_Sg2dGetCompInfo(env, sg2d, pPrim, &compInfo); } + stroke = (*env)->GetIntField(env, sg2d, sg2dStrokeHintID); + sdOps = SurfaceData_GetOps(env, sData); if (sdOps == 0) { return; @@ -102,6 +105,10 @@ maxCoords = (*env)->GetArrayLength(env, coordsArray); coords = (jfloat*)(*env)->GetPrimitiveArrayCritical( env, coordsArray, NULL); + if (coords == NULL) { + SurfaceData_InvokeUnlock(env, sdOps, &rasInfo); + return; + } if (ret == SD_SLOWLOCK) { GrPrim_RefineBounds(&rasInfo.bounds, transX, transY, @@ -146,24 +153,31 @@ drawHandler.yMax = rasInfo.bounds.y2; drawHandler.pData = &dHData; - if (!doFillPath(&drawHandler, - transX, transY, coords, - maxCoords, types, numTypes, - (stroke == sunHints_INTVAL_STROKE_PURE)? - PH_STROKE_PURE : PH_STROKE_DEFAULT, - fillRule)) - { - JNU_ThrowArrayIndexOutOfBoundsException(env, - "coords array"); + if (types != NULL) { + if (!doFillPath(&drawHandler, + transX, transY, coords, + maxCoords, types, numTypes, + (stroke == sunHints_INTVAL_STROKE_PURE)? + PH_STROKE_PURE : PH_STROKE_DEFAULT, + fillRule)) + { + throwExc = JNI_TRUE; + } + + (*env)->ReleasePrimitiveArrayCritical(env, typesArray, types, + JNI_ABORT); } - - (*env)->ReleasePrimitiveArrayCritical(env, typesArray, types, - JNI_ABORT); } } SurfaceData_InvokeRelease(env, sdOps, &rasInfo); } (*env)->ReleasePrimitiveArrayCritical(env, coordsArray, coords, JNI_ABORT); + + if (throwExc) { + JNU_ThrowArrayIndexOutOfBoundsException(env, + "coords array"); + } + SurfaceData_InvokeUnlock(env, sdOps, &rasInfo); } diff -r 549b20d82587 -r 8fab9959a1bc jdk/src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.c --- a/jdk/src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.c Thu Oct 03 11:28:37 2013 +0400 +++ b/jdk/src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.c Thu Oct 03 13:16:31 2013 -0700 @@ -205,33 +205,36 @@ RegisterFunc RegisterFourByteAbgr; RegisterFunc RegisterFourByteAbgrPre; - RegisterAnyByte(env); - RegisterByteBinary1Bit(env); - RegisterByteBinary2Bit(env); - RegisterByteBinary4Bit(env); - RegisterByteIndexed(env); - RegisterByteGray(env); - RegisterIndex8Gray(env); - RegisterIndex12Gray(env); - RegisterAnyShort(env); - RegisterUshort555Rgb(env); - RegisterUshort565Rgb(env); - RegisterUshort4444Argb(env); - RegisterUshort555Rgbx(env); - RegisterUshortGray(env); - RegisterUshortIndexed(env); - RegisterAny3Byte(env); - RegisterThreeByteBgr(env); - RegisterAnyInt(env); - RegisterIntArgb(env); - RegisterIntArgbPre(env); - RegisterIntArgbBm(env); - RegisterIntRgb(env); - RegisterIntBgr(env); - RegisterIntRgbx(env); - RegisterAny4Byte(env); - RegisterFourByteAbgr(env); - RegisterFourByteAbgrPre(env); + if (!RegisterAnyByte(env) || + !RegisterByteBinary1Bit(env) || + !RegisterByteBinary2Bit(env) || + !RegisterByteBinary4Bit(env) || + !RegisterByteIndexed(env) || + !RegisterByteGray(env) || + !RegisterIndex8Gray(env) || + !RegisterIndex12Gray(env) || + !RegisterAnyShort(env) || + !RegisterUshort555Rgb(env) || + !RegisterUshort565Rgb(env) || + !RegisterUshort4444Argb(env) || + !RegisterUshort555Rgbx(env) || + !RegisterUshortGray(env) || + !RegisterUshortIndexed(env) || + !RegisterAny3Byte(env) || + !RegisterThreeByteBgr(env) || + !RegisterAnyInt(env) || + !RegisterIntArgb(env) || + !RegisterIntArgbPre(env) || + !RegisterIntArgbBm(env) || + !RegisterIntRgb(env) || + !RegisterIntBgr(env) || + !RegisterIntRgbx(env) || + !RegisterAny4Byte(env) || + !RegisterFourByteAbgr(env) || + !RegisterFourByteAbgrPre(env)) + { + return; + } } #define _StartOf(T) ((T *) (&T##s)) diff -r 549b20d82587 -r 8fab9959a1bc jdk/src/share/native/sun/java2d/loops/MaskBlit.c --- a/jdk/src/share/native/sun/java2d/loops/MaskBlit.c Thu Oct 03 11:28:37 2013 +0400 +++ b/jdk/src/share/native/sun/java2d/loops/MaskBlit.c Thu Oct 03 13:16:31 2013 -0700 @@ -60,8 +60,11 @@ } srcOps = SurfaceData_GetOps(env, srcData); + if (srcOps == 0) { + return; + } dstOps = SurfaceData_GetOps(env, dstData); - if (srcOps == 0 || dstOps == 0) { + if (dstOps == 0) { return; } @@ -96,6 +99,13 @@ (maskArray ? (*env)->GetPrimitiveArrayCritical(env, maskArray, 0) : 0); + if (maskArray != NULL && pMask == NULL) { + SurfaceData_InvokeRelease(env, dstOps, &dstInfo); + SurfaceData_InvokeRelease(env, srcOps, &srcInfo); + SurfaceData_InvokeUnlock(env, dstOps, &dstInfo); + SurfaceData_InvokeUnlock(env, srcOps, &srcInfo); + return; + } jint savesx = srcInfo.bounds.x1; jint savedx = dstInfo.bounds.x1; Region_StartIteration(env, &clipInfo); diff -r 549b20d82587 -r 8fab9959a1bc jdk/src/share/native/sun/java2d/loops/MaskFill.c --- a/jdk/src/share/native/sun/java2d/loops/MaskFill.c Thu Oct 03 11:28:37 2013 +0400 +++ b/jdk/src/share/native/sun/java2d/loops/MaskFill.c Thu Oct 03 13:16:31 2013 -0700 @@ -84,6 +84,11 @@ (maskArray ? (*env)->GetPrimitiveArrayCritical(env, maskArray, 0) : 0); + if (maskArray != NULL && pMask == NULL) { + SurfaceData_InvokeRelease(env, sdOps, &rasInfo); + SurfaceData_InvokeUnlock(env, sdOps, &rasInfo); + return; + } maskoff += ((rasInfo.bounds.y1 - y) * maskscan + (rasInfo.bounds.x1 - x)); (*pPrim->funcs.maskfill)(pDst, diff -r 549b20d82587 -r 8fab9959a1bc jdk/src/share/native/sun/java2d/loops/ScaledBlit.c --- a/jdk/src/share/native/sun/java2d/loops/ScaledBlit.c Thu Oct 03 11:28:37 2013 +0400 +++ b/jdk/src/share/native/sun/java2d/loops/ScaledBlit.c Thu Oct 03 13:16:31 2013 -0700 @@ -296,8 +296,11 @@ } srcOps = SurfaceData_GetOps(env, srcData); + if (srcOps == 0) { + return; + } dstOps = SurfaceData_GetOps(env, dstData); - if (srcOps == 0 || dstOps == 0) { + if (dstOps == 0) { return; } diff -r 549b20d82587 -r 8fab9959a1bc jdk/src/share/native/sun/java2d/loops/TransformHelper.c --- a/jdk/src/share/native/sun/java2d/loops/TransformHelper.c Thu Oct 03 11:28:37 2013 +0400 +++ b/jdk/src/share/native/sun/java2d/loops/TransformHelper.c Thu Oct 03 13:16:31 2013 -0700 @@ -326,8 +326,11 @@ } srcOps = SurfaceData_GetOps(env, srcData); + if (srcOps == 0) { + return; + } dstOps = SurfaceData_GetOps(env, dstData); - if (srcOps == 0 || dstOps == 0) { + if (dstOps == 0) { return; } @@ -411,7 +414,7 @@ } if (pEdges == NULL) { - if (numedges > 0) { + if (!(*env)->ExceptionCheck(env) && numedges > 0) { JNU_ThrowInternalError(env, "Unable to allocate edge list"); } SurfaceData_InvokeUnlock(env, dstOps, &dstInfo);