提交 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
}
srcOps = SurfaceData_GetOps(env, srcData);
if (srcOps == 0) {
return;
}
dstOps = SurfaceData_GetOps(env, dstData);
if (srcOps == 0 || dstOps == 0) {
if (dstOps == 0) {
return;
}
......
......@@ -60,8 +60,11 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_BlitBg_BlitBg
}
srcOps = SurfaceData_GetOps(env, srcData);
if (srcOps == 0) {
return;
}
dstOps = SurfaceData_GetOps(env, dstData);
if (srcOps == 0 || dstOps == 0) {
if (dstOps == 0) {
return;
}
......
......@@ -75,7 +75,8 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_DrawPath_DrawPath
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 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_DrawPath_DrawPath
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 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_DrawPath_DrawPath
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 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_DrawPath_DrawPath
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);
}
......@@ -186,10 +186,15 @@ Java_sun_java2d_loops_DrawPolygons_DrawPolygons
}
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) {
......
......@@ -64,7 +64,8 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_FillPath_FillPath
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 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_FillPath_FillPath
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 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_FillPath_FillPath
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 @@ JNIEXPORT void JNICALL Java_sun_java2d_loops_FillPath_FillPath
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");
}
(*env)->ReleasePrimitiveArrayCritical(env, typesArray, types,
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);
}
}
}
SurfaceData_InvokeRelease(env, sdOps, &rasInfo);
}
(*env)->ReleasePrimitiveArrayCritical(env, coordsArray, coords,
JNI_ABORT);
if (throwExc) {
JNU_ThrowArrayIndexOutOfBoundsException(env,
"coords array");
}
SurfaceData_InvokeUnlock(env, sdOps, &rasInfo);
}
......@@ -205,33 +205,36 @@ Java_sun_java2d_loops_GraphicsPrimitiveMgr_registerNativeLoops
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))
......
......@@ -60,8 +60,11 @@ Java_sun_java2d_loops_MaskBlit_MaskBlit
}
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 @@ Java_sun_java2d_loops_MaskBlit_MaskBlit
(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);
......
......@@ -84,6 +84,11 @@ Java_sun_java2d_loops_MaskFill_MaskFill
(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,
......
......@@ -296,8 +296,11 @@ Java_sun_java2d_loops_ScaledBlit_Scale
}
srcOps = SurfaceData_GetOps(env, srcData);
if (srcOps == 0) {
return;
}
dstOps = SurfaceData_GetOps(env, dstData);
if (srcOps == 0 || dstOps == 0) {
if (dstOps == 0) {
return;
}
......
......@@ -326,8 +326,11 @@ Java_sun_java2d_loops_TransformHelper_Transform
}
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 @@ Java_sun_java2d_loops_TransformHelper_Transform
}
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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册