# HG changeset patch # User ant # Date 1206606900 -10800 # Node ID 199e770440101c7a74153d85dde8c9c050c5eeae # Parent 89b44fab010ff04a67e59eea7a165c71cc905d10# Parent 5b2da06c1acce8ac1b27b5af843e9be4b67a3cd6 Merge diff -r 89b44fab010f -r 199e77044010 jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_sys.c --- a/jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_sys.c Wed Mar 26 17:38:26 2008 +0300 +++ b/jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_sys.c Thu Mar 27 11:35:00 2008 +0300 @@ -436,6 +436,7 @@ break; } case PseudoColor: { + int availableColors; int numColors; int numComponents[3]; unsigned long colorIndex[SPLASH_COLOR_MAP_SIZE]; @@ -444,9 +445,20 @@ int depth = XDefaultDepthOfScreen(splash->screen); int scale = 65535 / MAX_COLOR_VALUE; - numColors = GetNumAvailableColors(splash->display, splash->screen, + availableColors = GetNumAvailableColors(splash->display, splash->screen, splash->visual->map_entries); - numColors = quantizeColors(numColors, numComponents); + numColors = quantizeColors(availableColors, numComponents); + if (numColors > availableColors) { + // Could not allocate the color cells. Most probably + // the pool got exhausted. Disable the splash screen. + XCloseDisplay(splash->display); + splash->isVisible = -1; + splash->display = NULL; + splash->screen = NULL; + splash->visual = NULL; + fprintf(stderr, "Warning: unable to initialize the splashscreen. Not enough available color cells.\n"); + return; + } splash->cmap = AllocColors(splash->display, splash->screen, numColors, colorIndex); for (i = 0; i < numColors; i++) {