open-src/lib/libX11/4614834.patch
author Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
Wed, 28 Apr 2010 18:08:17 -0700
changeset 943 294f64612d23
parent 919 425233ae7236
child 1064 3395ca7a91bf
permissions -rw-r--r--
6948254 Mass update of X gate sources to Oracle copyright format
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
341
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
     1
###############################################################################
943
294f64612d23 6948254 Mass update of X gate sources to Oracle copyright format
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents: 919
diff changeset
     2
# Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
341
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
     3
#
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
     4
# Permission is hereby granted, free of charge, to any person obtaining a
919
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
     5
# copy of this software and associated documentation files (the "Software"),
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
     6
# to deal in the Software without restriction, including without limitation
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
     7
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
     8
# and/or sell copies of the Software, and to permit persons to whom the
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
     9
# Software is furnished to do so, subject to the following conditions:
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
    10
#
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
    11
# The above copyright notice and this permission notice (including the next
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
    12
# paragraph) shall be included in all copies or substantial portions of the
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
    13
# Software.
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
    14
#
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
    15
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
    16
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
    17
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
    18
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
    19
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
    20
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 688
diff changeset
    21
# DEALINGS IN THE SOFTWARE.
341
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    22
#
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    23
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    24
4614834: Xlib color functions are not MT-safe
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    25
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    26
In a multithreaded Xlib client:
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    27
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    28
    * concurrent access to XAllocNamedColor() make the client crash
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    29
    * concurrent access to XLookupColor() make the client crash
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    30
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    31
The cause of the problem is that in multithread environment some data
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    32
in XLookupColor() and XAllocNamedColor() can be accessed/modified at
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    33
same time by multi threads. Adding some lock and unlock code to make
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    34
sure only one thread can access the data at one time fixed the
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    35
problem.
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    36
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    37
diff -urp -x '*~' -x '*.orig' src/GetColor.c src/GetColor.c
688
ec7ff53634c7 6828047 Update libX11 to version 1.2.1
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 341
diff changeset
    38
--- src/GetColor.c	2008-10-07 10:18:18.000000000 -0700
ec7ff53634c7 6828047 Update libX11 to version 1.2.1
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 341
diff changeset
    39
+++ src/GetColor.c	2009-04-08 00:17:54.349336000 -0700
ec7ff53634c7 6828047 Update libX11 to version 1.2.1
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 341
diff changeset
    40
@@ -58,12 +58,14 @@ XColor *exact_def) /* RETURN */
341
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    41
     if ((ccc = XcmsCCCOfColormap(dpy, cmap)) != (XcmsCCC)NULL) {
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    42
 	const char *tmpName = colorname;
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    43
 
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    44
+	LockDisplay(dpy);
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    45
 	switch (_XcmsResolveColorString(ccc, &tmpName, &cmsColor_exact,
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    46
 					XcmsRGBFormat)) {
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    47
 	case XcmsSuccess:
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    48
 	case XcmsSuccessWithCompression:
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    49
 	    _XcmsRGB_to_XColor(&cmsColor_exact, exact_def, 1);
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    50
 	    memcpy((char *)hard_def, (char *)exact_def, sizeof(XColor));
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    51
+	    UnlockDisplay(dpy);
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    52
 	    ret = XAllocColor(dpy, cmap, hard_def);
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    53
 	    exact_def->pixel = hard_def->pixel;
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    54
 	    return(ret);
688
ec7ff53634c7 6828047 Update libX11 to version 1.2.1
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 341
diff changeset
    55
@@ -76,6 +78,7 @@ XColor *exact_def) /* RETURN */
341
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    56
 	     */
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    57
 	    break;
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    58
 	}
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    59
+	UnlockDisplay(dpy);
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    60
     }
688
ec7ff53634c7 6828047 Update libX11 to version 1.2.1
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 341
diff changeset
    61
 #endif
341
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    62
 
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    63
diff -urp -x '*~' -x '*.orig' src/LookupCol.c src/LookupCol.c
688
ec7ff53634c7 6828047 Update libX11 to version 1.2.1
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 341
diff changeset
    64
--- src/LookupCol.c	2008-10-07 10:18:18.000000000 -0700
ec7ff53634c7 6828047 Update libX11 to version 1.2.1
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 341
diff changeset
    65
+++ src/LookupCol.c	2009-04-08 00:17:54.349566000 -0700
ec7ff53634c7 6828047 Update libX11 to version 1.2.1
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 341
diff changeset
    66
@@ -56,6 +56,7 @@ XLookupColor (
341
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    67
 	if ((ccc = XcmsCCCOfColormap(dpy, cmap)) != (XcmsCCC)NULL) {
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    68
 	    const char *tmpName = spec;
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    69
 
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    70
+	    LockDisplay(dpy);
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    71
 	    switch (_XcmsResolveColorString(ccc, &tmpName, &cmsColor_exact,
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    72
 					    XcmsRGBFormat)) {
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    73
 	    case XcmsSuccess:
688
ec7ff53634c7 6828047 Update libX11 to version 1.2.1
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 341
diff changeset
    74
@@ -63,6 +64,7 @@ XLookupColor (
341
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    75
 		_XcmsRGB_to_XColor(&cmsColor_exact, def, 1);
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    76
 		memcpy((char *)scr, (char *)def, sizeof(XColor));
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    77
 		_XUnresolveColor(ccc, scr);
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    78
+		UnlockDisplay(dpy);
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    79
 		return(1);
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    80
 	    case XcmsFailure:
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    81
 	    case _XCMS_NEWNAME:
688
ec7ff53634c7 6828047 Update libX11 to version 1.2.1
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 341
diff changeset
    82
@@ -73,6 +75,7 @@ XLookupColor (
341
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    83
 		 */
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    84
 		break;
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    85
 	    }
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    86
+	    UnlockDisplay(dpy);
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    87
 	}
688
ec7ff53634c7 6828047 Update libX11 to version 1.2.1
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 341
diff changeset
    88
 #endif
341
0a1eb61fd56e 6668846 Upgrade libX11 to X11R7 version
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    89