From 79fd2e6c5fd868866049ac485acb0ad81acae17f Mon Sep 17 00:00:00 2001 From: littlee Date: Mon, 12 Mar 2012 13:30:16 +0800 Subject: [PATCH] 7151427: Fix the potential memory leak in error handling code in X11SurfaceData.c Summary: Free the memory in the error handling code. Reviewed-by: prr, jgodinez, bae Contributed-by: Sean Chou --- src/solaris/native/sun/java2d/x11/X11SurfaceData.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/solaris/native/sun/java2d/x11/X11SurfaceData.c b/src/solaris/native/sun/java2d/x11/X11SurfaceData.c index a993217e4..e74b6dd03 100644 --- a/src/solaris/native/sun/java2d/x11/X11SurfaceData.c +++ b/src/solaris/native/sun/java2d/x11/X11SurfaceData.c @@ -540,6 +540,8 @@ XImage* X11SD_CreateSharedImage(X11SDOps *xsdo, J2dRlsTraceLn1(J2D_TRACE_ERROR, "X11SD_SetupSharedSegment shmget has failed: %s", strerror(errno)); + free((void *)shminfo); + XDestroyImage(img); return NULL; } @@ -549,6 +551,8 @@ XImage* X11SD_CreateSharedImage(X11SDOps *xsdo, J2dRlsTraceLn1(J2D_TRACE_ERROR, "X11SD_SetupSharedSegment shmat has failed: %s", strerror(errno)); + free((void *)shminfo); + XDestroyImage(img); return NULL; } @@ -569,6 +573,9 @@ XImage* X11SD_CreateSharedImage(X11SDOps *xsdo, J2dRlsTraceLn1(J2D_TRACE_ERROR, "X11SD_SetupSharedSegment XShmAttach has failed: %s", strerror(errno)); + shmdt(shminfo->shmaddr); + free((void *)shminfo); + XDestroyImage(img); return NULL; } @@ -1344,13 +1351,10 @@ void X11SD_DisposeXImage(XImage * image) { #ifdef MITSHM if (image->obdata != NULL) { X11SD_DropSharedSegment((XShmSegmentInfo*)image->obdata); - } else { - free(image->data); + image->obdata = NULL; } -#else - free(image->data); #endif /* MITSHM */ - XFree(image); + XDestroyImage(image); } } -- GitLab