mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 19:44:41 +02:00
7004728: [parfait] potential memory leaks in XRender code
Reviewed-by: bae, ceisserer
This commit is contained in:
parent
2a5a9cc238
commit
3c489ff5e2
1 changed files with 68 additions and 25 deletions
|
@ -312,7 +312,11 @@ Java_sun_java2d_xr_XRBackendNative_XRenderRectanglesNative
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((rects = (jint *) (*env)->GetPrimitiveArrayCritical(env, rectArray, NULL)) == NULL) {
|
if ((rects = (jint *)
|
||||||
|
(*env)->GetPrimitiveArrayCritical(env, rectArray, NULL)) == NULL) {
|
||||||
|
if (xRects != &sRects[0]) {
|
||||||
|
free(xRects);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -610,17 +614,30 @@ Java_sun_java2d_xr_XRBackendNative_XRAddGlyphsNative
|
||||||
Glyph *gid = (Glyph *) malloc(sizeof(Glyph) * glyphCnt);
|
Glyph *gid = (Glyph *) malloc(sizeof(Glyph) * glyphCnt);
|
||||||
|
|
||||||
if (xginfo == NULL || gid == NULL) {
|
if (xginfo == NULL || gid == NULL) {
|
||||||
|
if (xginfo != NULL) {
|
||||||
|
free(xginfo);
|
||||||
|
}
|
||||||
|
if (gid != NULL) {
|
||||||
|
free(gid);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((glyphInfoPtrs = (jlong *) (*env)->GetPrimitiveArrayCritical(env, glyphInfoPtrsArray, NULL)) == NULL) {
|
if ((glyphInfoPtrs = (jlong *)(*env)->
|
||||||
|
GetPrimitiveArrayCritical(env, glyphInfoPtrsArray, NULL)) == NULL)
|
||||||
|
{
|
||||||
|
free(xginfo);
|
||||||
|
free(gid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((pixelData = (unsigned char *)
|
if ((pixelData = (unsigned char *)
|
||||||
(*env)->GetPrimitiveArrayCritical(env, pixelDataArray, NULL)) == NULL) {
|
(*env)->GetPrimitiveArrayCritical(env, pixelDataArray, NULL)) == NULL)
|
||||||
|
{
|
||||||
(*env)->ReleasePrimitiveArrayCritical(env,
|
(*env)->ReleasePrimitiveArrayCritical(env,
|
||||||
glyphInfoPtrsArray, glyphInfoPtrs, JNI_ABORT);
|
glyphInfoPtrsArray, glyphInfoPtrs, JNI_ABORT);
|
||||||
|
free(xginfo);
|
||||||
|
free(gid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -637,7 +654,7 @@ Java_sun_java2d_xr_XRBackendNative_XRAddGlyphsNative
|
||||||
}
|
}
|
||||||
|
|
||||||
XRenderAddGlyphs(awt_display, glyphSet, &gid[0], &xginfo[0], glyphCnt,
|
XRenderAddGlyphs(awt_display, glyphSet, &gid[0], &xginfo[0], glyphCnt,
|
||||||
pixelData, pixelDataLength);
|
(const char*)pixelData, pixelDataLength);
|
||||||
|
|
||||||
(*env)->ReleasePrimitiveArrayCritical(env, glyphInfoPtrsArray, glyphInfoPtrs, JNI_ABORT);
|
(*env)->ReleasePrimitiveArrayCritical(env, glyphInfoPtrsArray, glyphInfoPtrs, JNI_ABORT);
|
||||||
(*env)->ReleasePrimitiveArrayCritical(env, pixelDataArray, pixelData, JNI_ABORT);
|
(*env)->ReleasePrimitiveArrayCritical(env, pixelDataArray, pixelData, JNI_ABORT);
|
||||||
|
@ -684,21 +701,43 @@ Java_sun_java2d_xr_XRBackendNative_XRenderCompositeTextNative
|
||||||
xelts = &selts[0];
|
xelts = &selts[0];
|
||||||
}else {
|
}else {
|
||||||
xelts = (XGlyphElt32 *) malloc(sizeof(XGlyphElt32) * eltCnt);
|
xelts = (XGlyphElt32 *) malloc(sizeof(XGlyphElt32) * eltCnt);
|
||||||
|
if (xelts == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (glyphCnt <= 256) {
|
if (glyphCnt <= 256) {
|
||||||
xids = &sids[0];
|
xids = &sids[0];
|
||||||
} else {
|
} else {
|
||||||
xids = (Glyph *) malloc(sizeof(Glyph) * glyphCnt);
|
xids = (Glyph *) malloc(sizeof(Glyph) * glyphCnt);
|
||||||
|
if (xids == NULL) {
|
||||||
|
if (xelts != &selts[0]) {
|
||||||
|
free(xelts);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ids = (jint *) (*env)->GetPrimitiveArrayCritical(env, glyphIDArray, NULL)) == NULL) {
|
if ((ids = (jint *)
|
||||||
|
(*env)->GetPrimitiveArrayCritical(env, glyphIDArray, NULL)) == NULL) {
|
||||||
|
if (xelts != &selts[0]) {
|
||||||
|
free(xelts);
|
||||||
|
}
|
||||||
|
if (xids != &sids[0]) {
|
||||||
|
free(xids);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((elts = (jint *)
|
if ((elts = (jint *)
|
||||||
(*env)->GetPrimitiveArrayCritical(env, eltArray, NULL)) == NULL) {
|
(*env)->GetPrimitiveArrayCritical(env, eltArray, NULL)) == NULL) {
|
||||||
(*env)->ReleasePrimitiveArrayCritical(env,
|
(*env)->ReleasePrimitiveArrayCritical(env,
|
||||||
glyphIDArray, ids, JNI_ABORT);
|
glyphIDArray, ids, JNI_ABORT);
|
||||||
|
if (xelts != &selts[0]) {
|
||||||
|
free(xelts);
|
||||||
|
}
|
||||||
|
if (xids != &sids[0]) {
|
||||||
|
free(xids);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -762,7 +801,11 @@ Java_sun_java2d_xr_XRBackendNative_GCRectanglesNative
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((rects = (jint *) (*env)->GetPrimitiveArrayCritical(env, rectArray, NULL)) == NULL) {
|
if ((rects = (jint*)
|
||||||
|
(*env)->GetPrimitiveArrayCritical(env, rectArray, NULL)) == NULL) {
|
||||||
|
if (xRects != &sRects[0]) {
|
||||||
|
free(xRects);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue