8001034: Memory management improvements
Reviewed-by: mschoene, prr, jgodinez
This commit is contained in:
parent
95fadac5c6
commit
14d39ee359
jdk/src/solaris/native/sun
@ -906,6 +906,8 @@ static jint canUseShmExt = UNSET_MITSHM;
|
|||||||
static jint canUseShmExtPixmaps = UNSET_MITSHM;
|
static jint canUseShmExtPixmaps = UNSET_MITSHM;
|
||||||
static jboolean xshmAttachFailed = JNI_FALSE;
|
static jboolean xshmAttachFailed = JNI_FALSE;
|
||||||
|
|
||||||
|
extern int mitShmPermissionMask;
|
||||||
|
|
||||||
int J2DXErrHandler(Display *display, XErrorEvent *xerr) {
|
int J2DXErrHandler(Display *display, XErrorEvent *xerr) {
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
if (xerr->minor_code == X_ShmAttach) {
|
if (xerr->minor_code == X_ShmAttach) {
|
||||||
@ -944,7 +946,8 @@ void TryInitMITShm(JNIEnv *env, jint *shmExt, jint *shmPixmaps) {
|
|||||||
* we need to test that we can actually do XShmAttach.
|
* we need to test that we can actually do XShmAttach.
|
||||||
*/
|
*/
|
||||||
if (XShmQueryExtension(awt_display)) {
|
if (XShmQueryExtension(awt_display)) {
|
||||||
shminfo.shmid = shmget(IPC_PRIVATE, 0x10000, IPC_CREAT|0777);
|
shminfo.shmid = shmget(IPC_PRIVATE, 0x10000,
|
||||||
|
IPC_CREAT|mitShmPermissionMask);
|
||||||
if (shminfo.shmid < 0) {
|
if (shminfo.shmid < 0) {
|
||||||
AWT_UNLOCK();
|
AWT_UNLOCK();
|
||||||
J2dRlsTraceLn1(J2D_TRACE_ERROR,
|
J2dRlsTraceLn1(J2D_TRACE_ERROR,
|
||||||
|
@ -47,6 +47,9 @@
|
|||||||
#include <X11/extensions/shmproto.h>
|
#include <X11/extensions/shmproto.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define MITSHM_PERM_COMMON (0666)
|
||||||
|
#define MITSHM_PERM_OWNER (0600)
|
||||||
|
|
||||||
extern int XShmQueryExtension();
|
extern int XShmQueryExtension();
|
||||||
|
|
||||||
void TryInitMITShm(JNIEnv *env, jint *shmExt, jint *shmPixmaps);
|
void TryInitMITShm(JNIEnv *env, jint *shmExt, jint *shmPixmaps);
|
||||||
|
@ -89,6 +89,7 @@ static jclass xorCompClass;
|
|||||||
jint useMitShmExt = CANT_USE_MITSHM;
|
jint useMitShmExt = CANT_USE_MITSHM;
|
||||||
jint useMitShmPixmaps = CANT_USE_MITSHM;
|
jint useMitShmPixmaps = CANT_USE_MITSHM;
|
||||||
jint forceSharedPixmaps = JNI_FALSE;
|
jint forceSharedPixmaps = JNI_FALSE;
|
||||||
|
int mitShmPermissionMask = MITSHM_PERM_OWNER;
|
||||||
|
|
||||||
/* Cached shared image, one for all surface datas. */
|
/* Cached shared image, one for all surface datas. */
|
||||||
static XImage * cachedXImage;
|
static XImage * cachedXImage;
|
||||||
@ -119,6 +120,13 @@ jboolean XShared_initIDs(JNIEnv *env, jboolean allowShmPixmaps)
|
|||||||
if (getenv("NO_AWT_MITSHM") == NULL &&
|
if (getenv("NO_AWT_MITSHM") == NULL &&
|
||||||
getenv("NO_J2D_MITSHM") == NULL) {
|
getenv("NO_J2D_MITSHM") == NULL) {
|
||||||
char * force;
|
char * force;
|
||||||
|
char * permission = getenv("J2D_MITSHM_PERMISSION");
|
||||||
|
if (permission != NULL) {
|
||||||
|
if (strcmp(permission, "common") == 0) {
|
||||||
|
mitShmPermissionMask = MITSHM_PERM_COMMON;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TryInitMITShm(env, &useMitShmExt, &useMitShmPixmaps);
|
TryInitMITShm(env, &useMitShmExt, &useMitShmPixmaps);
|
||||||
|
|
||||||
if(allowShmPixmaps) {
|
if(allowShmPixmaps) {
|
||||||
@ -536,7 +544,8 @@ XImage* X11SD_CreateSharedImage(X11SDOps *xsdo,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
shminfo->shmid =
|
shminfo->shmid =
|
||||||
shmget(IPC_PRIVATE, height * img->bytes_per_line, IPC_CREAT|0777);
|
shmget(IPC_PRIVATE, height * img->bytes_per_line,
|
||||||
|
IPC_CREAT|mitShmPermissionMask);
|
||||||
if (shminfo->shmid < 0) {
|
if (shminfo->shmid < 0) {
|
||||||
J2dRlsTraceLn1(J2D_TRACE_ERROR,
|
J2dRlsTraceLn1(J2D_TRACE_ERROR,
|
||||||
"X11SD_SetupSharedSegment shmget has failed: %s",
|
"X11SD_SetupSharedSegment shmget has failed: %s",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user