提交 25a07433 编写于 作者: J jchen

8025280: [parfait] warnings from b107 for...

8025280: [parfait] warnings from b107 for jdk.src.share.native.sun.java2d.loops: JNI exception pending, JNI critical region violation
Reviewed-by: prr, jgodinez
上级 56dc7b28
...@@ -60,8 +60,11 @@ Java_sun_java2d_loops_Blit_Blit ...@@ -60,8 +60,11 @@ Java_sun_java2d_loops_Blit_Blit
} }
srcOps = SurfaceData_GetOps(env, srcData); srcOps = SurfaceData_GetOps(env, srcData);
if (srcOps == 0) {
return;
}
dstOps = SurfaceData_GetOps(env, dstData); dstOps = SurfaceData_GetOps(env, dstData);
if (srcOps == 0 || dstOps == 0) { if (dstOps == 0) {
return; return;
} }
......
...@@ -60,8 +60,11 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_BlitBg_BlitBg ...@@ -60,8 +60,11 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_BlitBg_BlitBg
} }
srcOps = SurfaceData_GetOps(env, srcData); srcOps = SurfaceData_GetOps(env, srcData);
if (srcOps == 0) {
return;
}
dstOps = SurfaceData_GetOps(env, dstData); dstOps = SurfaceData_GetOps(env, dstData);
if (srcOps == 0 || dstOps == 0) { if (dstOps == 0) {
return; return;
} }
......
...@@ -75,7 +75,8 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_DrawPath_DrawPath ...@@ -75,7 +75,8 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_DrawPath_DrawPath
CompositeInfo compInfo; CompositeInfo compInfo;
jint ret; jint ret;
NativePrimitive *pPrim = GetNativePrim(env, self); NativePrimitive *pPrim = GetNativePrim(env, self);
jint stroke = (*env)->GetIntField(env, sg2d, sg2dStrokeHintID); jint stroke;
jboolean throwExc = JNI_FALSE;
if (pPrim == NULL) { if (pPrim == NULL) {
return; return;
...@@ -84,6 +85,8 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_DrawPath_DrawPath ...@@ -84,6 +85,8 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_DrawPath_DrawPath
GrPrim_Sg2dGetCompInfo(env, sg2d, pPrim, &compInfo); GrPrim_Sg2dGetCompInfo(env, sg2d, pPrim, &compInfo);
} }
stroke = (*env)->GetIntField(env, sg2d, sg2dStrokeHintID);
sdOps = SurfaceData_GetOps(env, sData); sdOps = SurfaceData_GetOps(env, sData);
if (sdOps == 0) { if (sdOps == 0) {
return; return;
...@@ -112,6 +115,10 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_DrawPath_DrawPath ...@@ -112,6 +115,10 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_DrawPath_DrawPath
maxCoords = (*env)->GetArrayLength(env, coordsArray); maxCoords = (*env)->GetArrayLength(env, coordsArray);
coords = (jfloat*)(*env)->GetPrimitiveArrayCritical( coords = (jfloat*)(*env)->GetPrimitiveArrayCritical(
env, coordsArray, NULL); env, coordsArray, NULL);
if (coords == NULL) {
SurfaceData_InvokeUnlock(env, sdOps, &rasInfo);
return;
}
if (ret == SD_SLOWLOCK) { if (ret == SD_SLOWLOCK) {
GrPrim_RefineBounds(&rasInfo.bounds, transX, transY, GrPrim_RefineBounds(&rasInfo.bounds, transX, transY,
...@@ -157,22 +164,29 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_DrawPath_DrawPath ...@@ -157,22 +164,29 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_DrawPath_DrawPath
drawHandler.yMax = rasInfo.bounds.y2; drawHandler.yMax = rasInfo.bounds.y2;
drawHandler.pData = &dHData; drawHandler.pData = &dHData;
if (!doDrawPath(&drawHandler, NULL, transX, transY, if (types != NULL) {
coords, maxCoords, types, numTypes, if (!doDrawPath(&drawHandler, NULL, transX, transY,
(stroke == sunHints_INTVAL_STROKE_PURE)? coords, maxCoords, types, numTypes,
PH_STROKE_PURE : PH_STROKE_DEFAULT)) (stroke == sunHints_INTVAL_STROKE_PURE)?
{ PH_STROKE_PURE : PH_STROKE_DEFAULT))
JNU_ThrowArrayIndexOutOfBoundsException(env, {
"coords array"); throwExc = JNI_TRUE;
}
(*env)->ReleasePrimitiveArrayCritical(env, typesArray, types,
JNI_ABORT);
} }
(*env)->ReleasePrimitiveArrayCritical(env, typesArray, types,
JNI_ABORT);
} }
} }
SurfaceData_InvokeRelease(env, sdOps, &rasInfo); SurfaceData_InvokeRelease(env, sdOps, &rasInfo);
} }
(*env)->ReleasePrimitiveArrayCritical(env, coordsArray, coords, (*env)->ReleasePrimitiveArrayCritical(env, coordsArray, coords,
JNI_ABORT); JNI_ABORT);
if (throwExc) {
JNU_ThrowArrayIndexOutOfBoundsException(env,
"coords array");
}
SurfaceData_InvokeUnlock(env, sdOps, &rasInfo); SurfaceData_InvokeUnlock(env, sdOps, &rasInfo);
} }
...@@ -186,10 +186,15 @@ Java_sun_java2d_loops_DrawPolygons_DrawPolygons ...@@ -186,10 +186,15 @@ Java_sun_java2d_loops_DrawPolygons_DrawPolygons
} }
xPointsPtr = (*env)->GetPrimitiveArrayCritical(env, xPointsArray, NULL); xPointsPtr = (*env)->GetPrimitiveArrayCritical(env, xPointsArray, NULL);
yPointsPtr = (*env)->GetPrimitiveArrayCritical(env, yPointsArray, NULL); if (!xPointsPtr) {
if (!xPointsPtr || !yPointsPtr) {
ok = JNI_FALSE; ok = JNI_FALSE;
} }
if (ok) {
yPointsPtr = (*env)->GetPrimitiveArrayCritical(env, yPointsArray, NULL);
if (!yPointsPtr) {
ok = JNI_FALSE;
}
}
} }
if (ok) { if (ok) {
......
...@@ -64,7 +64,8 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_FillPath_FillPath ...@@ -64,7 +64,8 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_FillPath_FillPath
CompositeInfo compInfo; CompositeInfo compInfo;
jint ret; jint ret;
NativePrimitive *pPrim = GetNativePrim(env, self); NativePrimitive *pPrim = GetNativePrim(env, self);
jint stroke = (*env)->GetIntField(env, sg2d, sg2dStrokeHintID); jint stroke;
jboolean throwExc = JNI_FALSE;
if (pPrim == NULL) { if (pPrim == NULL) {
return; return;
...@@ -73,6 +74,8 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_FillPath_FillPath ...@@ -73,6 +74,8 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_FillPath_FillPath
GrPrim_Sg2dGetCompInfo(env, sg2d, pPrim, &compInfo); GrPrim_Sg2dGetCompInfo(env, sg2d, pPrim, &compInfo);
} }
stroke = (*env)->GetIntField(env, sg2d, sg2dStrokeHintID);
sdOps = SurfaceData_GetOps(env, sData); sdOps = SurfaceData_GetOps(env, sData);
if (sdOps == 0) { if (sdOps == 0) {
return; return;
...@@ -102,6 +105,10 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_FillPath_FillPath ...@@ -102,6 +105,10 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_FillPath_FillPath
maxCoords = (*env)->GetArrayLength(env, coordsArray); maxCoords = (*env)->GetArrayLength(env, coordsArray);
coords = (jfloat*)(*env)->GetPrimitiveArrayCritical( coords = (jfloat*)(*env)->GetPrimitiveArrayCritical(
env, coordsArray, NULL); env, coordsArray, NULL);
if (coords == NULL) {
SurfaceData_InvokeUnlock(env, sdOps, &rasInfo);
return;
}
if (ret == SD_SLOWLOCK) { if (ret == SD_SLOWLOCK) {
GrPrim_RefineBounds(&rasInfo.bounds, transX, transY, GrPrim_RefineBounds(&rasInfo.bounds, transX, transY,
...@@ -146,24 +153,31 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_FillPath_FillPath ...@@ -146,24 +153,31 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_FillPath_FillPath
drawHandler.yMax = rasInfo.bounds.y2; drawHandler.yMax = rasInfo.bounds.y2;
drawHandler.pData = &dHData; drawHandler.pData = &dHData;
if (!doFillPath(&drawHandler, if (types != NULL) {
transX, transY, coords, if (!doFillPath(&drawHandler,
maxCoords, types, numTypes, transX, transY, coords,
(stroke == sunHints_INTVAL_STROKE_PURE)? maxCoords, types, numTypes,
PH_STROKE_PURE : PH_STROKE_DEFAULT, (stroke == sunHints_INTVAL_STROKE_PURE)?
fillRule)) PH_STROKE_PURE : PH_STROKE_DEFAULT,
{ fillRule))
JNU_ThrowArrayIndexOutOfBoundsException(env, {
"coords array"); throwExc = JNI_TRUE;
} }
(*env)->ReleasePrimitiveArrayCritical(env, typesArray, types, (*env)->ReleasePrimitiveArrayCritical(env, typesArray, types,
JNI_ABORT); JNI_ABORT);
}
} }
} }
SurfaceData_InvokeRelease(env, sdOps, &rasInfo); SurfaceData_InvokeRelease(env, sdOps, &rasInfo);
} }
(*env)->ReleasePrimitiveArrayCritical(env, coordsArray, coords, (*env)->ReleasePrimitiveArrayCritical(env, coordsArray, coords,
JNI_ABORT); JNI_ABORT);
if (throwExc) {
JNU_ThrowArrayIndexOutOfBoundsException(env,
"coords array");
}
SurfaceData_InvokeUnlock(env, sdOps, &rasInfo); SurfaceData_InvokeUnlock(env, sdOps, &rasInfo);
} }
...@@ -205,33 +205,36 @@ Java_sun_java2d_loops_GraphicsPrimitiveMgr_registerNativeLoops ...@@ -205,33 +205,36 @@ Java_sun_java2d_loops_GraphicsPrimitiveMgr_registerNativeLoops
RegisterFunc RegisterFourByteAbgr; RegisterFunc RegisterFourByteAbgr;
RegisterFunc RegisterFourByteAbgrPre; RegisterFunc RegisterFourByteAbgrPre;
RegisterAnyByte(env); if (!RegisterAnyByte(env) ||
RegisterByteBinary1Bit(env); !RegisterByteBinary1Bit(env) ||
RegisterByteBinary2Bit(env); !RegisterByteBinary2Bit(env) ||
RegisterByteBinary4Bit(env); !RegisterByteBinary4Bit(env) ||
RegisterByteIndexed(env); !RegisterByteIndexed(env) ||
RegisterByteGray(env); !RegisterByteGray(env) ||
RegisterIndex8Gray(env); !RegisterIndex8Gray(env) ||
RegisterIndex12Gray(env); !RegisterIndex12Gray(env) ||
RegisterAnyShort(env); !RegisterAnyShort(env) ||
RegisterUshort555Rgb(env); !RegisterUshort555Rgb(env) ||
RegisterUshort565Rgb(env); !RegisterUshort565Rgb(env) ||
RegisterUshort4444Argb(env); !RegisterUshort4444Argb(env) ||
RegisterUshort555Rgbx(env); !RegisterUshort555Rgbx(env) ||
RegisterUshortGray(env); !RegisterUshortGray(env) ||
RegisterUshortIndexed(env); !RegisterUshortIndexed(env) ||
RegisterAny3Byte(env); !RegisterAny3Byte(env) ||
RegisterThreeByteBgr(env); !RegisterThreeByteBgr(env) ||
RegisterAnyInt(env); !RegisterAnyInt(env) ||
RegisterIntArgb(env); !RegisterIntArgb(env) ||
RegisterIntArgbPre(env); !RegisterIntArgbPre(env) ||
RegisterIntArgbBm(env); !RegisterIntArgbBm(env) ||
RegisterIntRgb(env); !RegisterIntRgb(env) ||
RegisterIntBgr(env); !RegisterIntBgr(env) ||
RegisterIntRgbx(env); !RegisterIntRgbx(env) ||
RegisterAny4Byte(env); !RegisterAny4Byte(env) ||
RegisterFourByteAbgr(env); !RegisterFourByteAbgr(env) ||
RegisterFourByteAbgrPre(env); !RegisterFourByteAbgrPre(env))
{
return;
}
} }
#define _StartOf(T) ((T *) (&T##s)) #define _StartOf(T) ((T *) (&T##s))
......
...@@ -60,8 +60,11 @@ Java_sun_java2d_loops_MaskBlit_MaskBlit ...@@ -60,8 +60,11 @@ Java_sun_java2d_loops_MaskBlit_MaskBlit
} }
srcOps = SurfaceData_GetOps(env, srcData); srcOps = SurfaceData_GetOps(env, srcData);
if (srcOps == 0) {
return;
}
dstOps = SurfaceData_GetOps(env, dstData); dstOps = SurfaceData_GetOps(env, dstData);
if (srcOps == 0 || dstOps == 0) { if (dstOps == 0) {
return; return;
} }
...@@ -96,6 +99,13 @@ Java_sun_java2d_loops_MaskBlit_MaskBlit ...@@ -96,6 +99,13 @@ Java_sun_java2d_loops_MaskBlit_MaskBlit
(maskArray (maskArray
? (*env)->GetPrimitiveArrayCritical(env, maskArray, 0) ? (*env)->GetPrimitiveArrayCritical(env, maskArray, 0)
: 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 savesx = srcInfo.bounds.x1;
jint savedx = dstInfo.bounds.x1; jint savedx = dstInfo.bounds.x1;
Region_StartIteration(env, &clipInfo); Region_StartIteration(env, &clipInfo);
......
...@@ -84,6 +84,11 @@ Java_sun_java2d_loops_MaskFill_MaskFill ...@@ -84,6 +84,11 @@ Java_sun_java2d_loops_MaskFill_MaskFill
(maskArray (maskArray
? (*env)->GetPrimitiveArrayCritical(env, maskArray, 0) ? (*env)->GetPrimitiveArrayCritical(env, maskArray, 0)
: 0); : 0);
if (maskArray != NULL && pMask == NULL) {
SurfaceData_InvokeRelease(env, sdOps, &rasInfo);
SurfaceData_InvokeUnlock(env, sdOps, &rasInfo);
return;
}
maskoff += ((rasInfo.bounds.y1 - y) * maskscan + maskoff += ((rasInfo.bounds.y1 - y) * maskscan +
(rasInfo.bounds.x1 - x)); (rasInfo.bounds.x1 - x));
(*pPrim->funcs.maskfill)(pDst, (*pPrim->funcs.maskfill)(pDst,
......
...@@ -296,8 +296,11 @@ Java_sun_java2d_loops_ScaledBlit_Scale ...@@ -296,8 +296,11 @@ Java_sun_java2d_loops_ScaledBlit_Scale
} }
srcOps = SurfaceData_GetOps(env, srcData); srcOps = SurfaceData_GetOps(env, srcData);
if (srcOps == 0) {
return;
}
dstOps = SurfaceData_GetOps(env, dstData); dstOps = SurfaceData_GetOps(env, dstData);
if (srcOps == 0 || dstOps == 0) { if (dstOps == 0) {
return; return;
} }
......
...@@ -326,8 +326,11 @@ Java_sun_java2d_loops_TransformHelper_Transform ...@@ -326,8 +326,11 @@ Java_sun_java2d_loops_TransformHelper_Transform
} }
srcOps = SurfaceData_GetOps(env, srcData); srcOps = SurfaceData_GetOps(env, srcData);
if (srcOps == 0) {
return;
}
dstOps = SurfaceData_GetOps(env, dstData); dstOps = SurfaceData_GetOps(env, dstData);
if (srcOps == 0 || dstOps == 0) { if (dstOps == 0) {
return; return;
} }
...@@ -411,7 +414,7 @@ Java_sun_java2d_loops_TransformHelper_Transform ...@@ -411,7 +414,7 @@ Java_sun_java2d_loops_TransformHelper_Transform
} }
if (pEdges == NULL) { if (pEdges == NULL) {
if (numedges > 0) { if (!(*env)->ExceptionCheck(env) && numedges > 0) {
JNU_ThrowInternalError(env, "Unable to allocate edge list"); JNU_ThrowInternalError(env, "Unable to allocate edge list");
} }
SurfaceData_InvokeUnlock(env, dstOps, &dstInfo); SurfaceData_InvokeUnlock(env, dstOps, &dstInfo);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册