open-src/xserver/xorg/CreateNewResourceType.patch
changeset 1088 1c99106ccbe0
parent 1087 a8aa060182e1
child 1089 590b35f0ad83
equal deleted inserted replaced
1087:a8aa060182e1 1088:1c99106ccbe0
     1 From eb750f8b5e14751d4c40b50499baec5d2ba79db9 Mon Sep 17 00:00:00 2001
       
     2 From: Alan Coopersmith <[email protected]>
       
     3 Date: Fri, 11 Dec 2009 00:46:22 -0800
       
     4 Subject: [PATCH] Check for failures from CreateNewResourceType
       
     5 
       
     6 Make sure to check return value before setting bitmask flags.
       
     7 For most calls, just fails to init the extension.   Since Xinput
       
     8 already calls FatalError() on initialization failure, so does
       
     9 failure to allocate Xinput's resource type.
       
    10 
       
    11 Signed-off-by: Alan Coopersmith <[email protected]>
       
    12 Reviewed-by: Keith Packard <[email protected]>
       
    13 ---
       
    14  Xext/mbuf.c                   |    4 +++-
       
    15  Xext/panoramiX.c              |   16 ++++++++++------
       
    16  Xext/sync.c                   |    8 ++++++--
       
    17  Xext/xvdisp.c                 |    4 ++--
       
    18  Xi/extinit.c                  |    2 ++
       
    19  dbe/dbe.c                     |    9 ++++++++-
       
    20  glx/glxext.c                  |    3 +++
       
    21  hw/dmx/glxProxy/glxext.c      |    4 ++++
       
    22  hw/kdrive/ephyr/ephyrdriext.c |    4 ++++
       
    23  hw/xfree86/dri/dri.c          |    3 +++
       
    24  hw/xfree86/dri2/dri2ext.c     |    6 +++++-
       
    25  hw/xquartz/xpr/dri.c          |    2 +-
       
    26  xfixes/cursor.c               |    2 +-
       
    27  xfixes/region.c               |    3 ++-
       
    28  xkb/xkb.c                     |    5 ++++-
       
    29  15 files changed, 58 insertions(+), 17 deletions(-)
       
    30 
       
    31 diff --git a/Xext/mbuf.c b/Xext/mbuf.c
       
    32 index 1f24974..af31221 100644
       
    33 --- a/Xext/mbuf.c
       
    34 +++ b/Xext/mbuf.c
       
    35 @@ -467,7 +467,9 @@ MultibufferExtensionInit()
       
    36       * create the resource types
       
    37       */
       
    38      MultibufferDrawableResType =
       
    39 -	CreateNewResourceType(MultibufferDrawableDelete)|RC_DRAWABLE;
       
    40 +	CreateNewResourceType(MultibufferDrawableDelete);
       
    41 +    if (MultiBufferDrawableResType)
       
    42 +	MultibufferDrawableResType |= RC_DRAWABLE;
       
    43      MultibufferResType = CreateNewResourceType(MultibufferDelete);
       
    44      MultibuffersResType = CreateNewResourceType(MultibuffersDelete);
       
    45      OtherClientResType = CreateNewResourceType(OtherClientDelete);
       
    46 diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c
       
    47 index 4b7b07e..f48bd36 100644
       
    48 --- a/Xext/panoramiX.c
       
    49 +++ b/Xext/panoramiX.c
       
    50 @@ -503,15 +503,19 @@ void PanoramiXExtensionInit(int argc, char *argv[])
       
    51  	}
       
    52  
       
    53  	XRC_DRAWABLE = CreateNewResourceClass();
       
    54 -	XRT_WINDOW = CreateNewResourceType(XineramaDeleteResource) | 
       
    55 -						XRC_DRAWABLE;
       
    56 -	XRT_PIXMAP = CreateNewResourceType(XineramaDeleteResource) | 
       
    57 -						XRC_DRAWABLE;
       
    58 +	XRT_WINDOW = CreateNewResourceType(XineramaDeleteResource);
       
    59 +	if (XRT_WINDOW)
       
    60 +	    XRT_WINDOW |= XRC_DRAWABLE;
       
    61 +	XRT_PIXMAP = CreateNewResourceType(XineramaDeleteResource);
       
    62 +	if (XRT_PIXMAP)
       
    63 +	    XRT_PIXMAP |= XRC_DRAWABLE;
       
    64  	XRT_GC = CreateNewResourceType(XineramaDeleteResource);
       
    65  	XRT_COLORMAP = CreateNewResourceType(XineramaDeleteResource);
       
    66  
       
    67 -	panoramiXGeneration = serverGeneration;
       
    68 -	success = TRUE;
       
    69 +	if (XRT_WINDOW && XRT_PIXMAP && XRT_GC && XRT_COLORMAP) {
       
    70 +	    panoramiXGeneration = serverGeneration;
       
    71 +	    success = TRUE;
       
    72 +	}
       
    73      }
       
    74  
       
    75      if (!success) {
       
    76 diff --git a/Xext/sync.c b/Xext/sync.c
       
    77 index 667f8ab..d8a2b15 100644
       
    78 --- a/Xext/sync.c
       
    79 +++ b/Xext/sync.c
       
    80 @@ -2113,8 +2113,12 @@ SyncExtensionInit(void)
       
    81  	RTCounter = CreateNewResourceType(FreeCounter);
       
    82      }
       
    83      RTAlarm = CreateNewResourceType(FreeAlarm);
       
    84 -    RTAwait = CreateNewResourceType(FreeAwait)|RC_NEVERRETAIN;
       
    85 -    RTAlarmClient = CreateNewResourceType(FreeAlarmClient)|RC_NEVERRETAIN;
       
    86 +    RTAwait = CreateNewResourceType(FreeAwait);
       
    87 +    if (RTAwait)
       
    88 +	RTAwait |= RC_NEVERRETAIN;
       
    89 +    RTAlarmClient = CreateNewResourceType(FreeAlarmClient);
       
    90 +    if (RTAlarmClient)
       
    91 +	RTAlarmClient |= RC_NEVERRETAIN;
       
    92  
       
    93      if (RTCounter == 0 || RTAwait == 0 || RTAlarm == 0 ||
       
    94  	RTAlarmClient == 0 ||
       
    95 diff --git a/Xext/xvdisp.c b/Xext/xvdisp.c
       
    96 index 5229916..1f3fc0f 100644
       
    97 --- a/Xext/xvdisp.c
       
    98 +++ b/Xext/xvdisp.c
       
    99 @@ -1865,8 +1865,8 @@ void XineramifyXv(void)
       
   100  
       
   101     XvXRTPort = CreateNewResourceType(XineramaDeleteResource);
       
   102  
       
   103 -   if(!xvsp0) return;
       
   104 -   
       
   105 +   if (!xvsp0 || !XvXRTPort) return;
       
   106 +
       
   107     for(i = 0; i < xvsp0->nAdaptors; i++) {
       
   108        refAdapt = xvsp0->pAdaptors + i;
       
   109  
       
   110 diff --git a/Xi/extinit.c b/Xi/extinit.c
       
   111 index 0c12919..372f77f 100644
       
   112 --- a/Xi/extinit.c
       
   113 +++ b/Xi/extinit.c
       
   114 @@ -1270,6 +1270,8 @@ XInputExtensionInit(void)
       
   115  	XIVersion = thisversion;
       
   116  	MakeDeviceTypeAtoms();
       
   117  	RT_INPUTCLIENT = CreateNewResourceType((DeleteType) InputClientGone);
       
   118 +	if (!RT_INPUTCLIENT)
       
   119 +	    FatalError("Failed to add resource type for XI.\n");
       
   120  	RegisterResourceName(RT_INPUTCLIENT, "INPUTCLIENT");
       
   121  	FixExtensionEvents(extEntry);
       
   122  	ReplySwapVector[IReqCode] = (ReplySwapPtr) SReplyIDispatch;
       
   123 diff --git a/dbe/dbe.c b/dbe/dbe.c
       
   124 index a4f853d..8d2a343 100644
       
   125 --- a/dbe/dbe.c
       
   126 +++ b/dbe/dbe.c
       
   127 @@ -1573,9 +1573,16 @@ DbeExtensionInit(void)
       
   128  
       
   129      /* Create the resource types. */
       
   130      dbeDrawableResType =
       
   131 -        CreateNewResourceType(DbeDrawableDelete) | RC_DRAWABLE;
       
   132 +        CreateNewResourceType(DbeDrawableDelete);
       
   133 +    if (!dbeDrawableResType)
       
   134 +	return;
       
   135 +    dbeDrawableResType |= RC_DRAWABLE;
       
   136 +
       
   137      dbeWindowPrivResType =
       
   138          CreateNewResourceType(DbeWindowPrivDelete);
       
   139 +    if (!dbeWindowPrivResType)
       
   140 +	return;
       
   141 +
       
   142      if (!dixRegisterPrivateOffset(dbeDrawableResType,
       
   143  				  offsetof(PixmapRec, devPrivates)))
       
   144  	return;
       
   145 diff --git a/glx/glxext.c b/glx/glxext.c
       
   146 index 9f9c0ed..546d968 100644
       
   147 --- a/glx/glxext.c
       
   148 +++ b/glx/glxext.c
       
   149 @@ -347,6 +347,9 @@ void GlxExtensionInit(void)
       
   150      __glXDrawableRes = CreateNewResourceType((DeleteType)DrawableGone);
       
   151      __glXSwapBarrierRes = CreateNewResourceType((DeleteType)SwapBarrierGone);
       
   152  
       
   153 +    if (!__glXContextRes || !__glXDrawableRes || !__glXSwapBarrierRes)
       
   154 +	return;
       
   155 +
       
   156      RegisterResourceName(__glXContextRes, "GLXContext");
       
   157      RegisterResourceName(__glXDrawableRes, "GLXDrawable");
       
   158      RegisterResourceName(__glXSwapBarrierRes, "GLXSwapBarrier");
       
   159 diff --git a/hw/dmx/glxProxy/glxext.c b/hw/dmx/glxProxy/glxext.c
       
   160 index b30d144..0c39068 100644
       
   161 --- a/hw/dmx/glxProxy/glxext.c
       
   162 +++ b/hw/dmx/glxProxy/glxext.c
       
   163 @@ -299,6 +299,10 @@ void GlxExtensionInit(void)
       
   164      __glXWindowRes = CreateNewResourceType((DeleteType)WindowGone);
       
   165      __glXPbufferRes = CreateNewResourceType((DeleteType)PbufferGone);
       
   166  
       
   167 +    if (!__glXContextRes || !__glXClientRes || !__glXPixmapRes ||
       
   168 +	!__glXWindowRes || !__glXPbufferRes)
       
   169 +	return;
       
   170 +
       
   171      /*
       
   172      ** Add extension to server extensions.
       
   173      */
       
   174 diff --git a/hw/kdrive/ephyr/ephyrdriext.c b/hw/kdrive/ephyr/ephyrdriext.c
       
   175 index 231b098..ba1733b 100644
       
   176 --- a/hw/kdrive/ephyr/ephyrdriext.c
       
   177 +++ b/hw/kdrive/ephyr/ephyrdriext.c
       
   178 @@ -141,6 +141,10 @@ ephyrDRIExtensionInit (ScreenPtr a_screen)
       
   179  
       
   180  #ifdef XF86DRI_EVENTS
       
   181      EventType = CreateNewResourceType (XF86DRIFreeEvents);
       
   182 +    if (!EventType) {
       
   183 +        EPHYR_LOG_ERROR ("failed to register DRI event resource type\n") ;
       
   184 +        goto out ;
       
   185 +    }
       
   186  #endif
       
   187  
       
   188      if ((extEntry = AddExtension(XF86DRINAME,
       
   189 diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c
       
   190 index 0de9be6..1a6cb4d 100644
       
   191 --- a/hw/xfree86/dri/dri.c
       
   192 +++ b/hw/xfree86/dri/dri.c
       
   193 @@ -792,6 +792,9 @@ DRIExtensionInit(void)
       
   194      DRIDrawablePrivResType = CreateNewResourceType(DRIDrawablePrivDelete);
       
   195      DRIContextPrivResType = CreateNewResourceType(DRIContextPrivDelete);
       
   196  
       
   197 +    if (!DRIDrawablePrivResType || !DRIContextPrivResType)
       
   198 +	return FALSE;
       
   199 +
       
   200      RegisterBlockAndWakeupHandlers(DRIBlockHandler, DRIWakeupHandler, NULL);
       
   201  
       
   202      return TRUE;
       
   203 diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c
       
   204 index dc07b47..8acf267 100644
       
   205 --- a/hw/xfree86/dri2/dri2ext.c
       
   206 +++ b/hw/xfree86/dri2/dri2ext.c
       
   207 @@ -416,6 +416,11 @@ static int DRI2DrawableGone(pointer p, XID id)
       
   208  static void
       
   209  DRI2ExtensionInit(void)
       
   210  {
       
   211 +    dri2DrawableRes = CreateNewResourceType(DRI2DrawableGone);
       
   212 +
       
   213 +    if (!dri2DrawableRes)
       
   214 +	return;
       
   215 +
       
   216      dri2Extension = AddExtension(DRI2_NAME,
       
   217  				 DRI2NumberEvents,
       
   218  				 DRI2NumberErrors,
       
   219 @@ -424,7 +429,6 @@ DRI2ExtensionInit(void)
       
   220  				 NULL,
       
   221  				 StandardMinorOpcode);
       
   222  
       
   223 -    dri2DrawableRes = CreateNewResourceType(DRI2DrawableGone);
       
   224  }
       
   225  
       
   226  extern Bool noDRI2Extension;
       
   227 diff --git a/hw/xquartz/xpr/dri.c b/hw/xquartz/xpr/dri.c
       
   228 index f570bee..a9c0f22 100644
       
   229 --- a/hw/xquartz/xpr/dri.c
       
   230 +++ b/hw/xquartz/xpr/dri.c
       
   231 @@ -279,7 +279,7 @@ DRIExtensionInit(void)
       
   232  {
       
   233      DRIDrawablePrivResType = CreateNewResourceType(DRIDrawablePrivDelete);
       
   234  
       
   235 -    return TRUE;
       
   236 +    return (DRIDrawablePrivResType != 0);
       
   237  }
       
   238  
       
   239  void
       
   240 diff --git a/xfixes/cursor.c b/xfixes/cursor.c
       
   241 index 60d4222..c3e1e35 100644
       
   242 --- a/xfixes/cursor.c
       
   243 +++ b/xfixes/cursor.c
       
   244 @@ -1095,6 +1095,6 @@ XFixesCursorInit (void)
       
   245  	}
       
   246      }
       
   247  
       
   248 -    return CursorClientType && CursorWindowType;
       
   249 +    return CursorClientType && CursorHideCountType && CursorWindowType;
       
   250  }
       
   251  
       
   252 diff --git a/xfixes/region.c b/xfixes/region.c
       
   253 index 966eda0..59d8cee 100644
       
   254 --- a/xfixes/region.c
       
   255 +++ b/xfixes/region.c
       
   256 @@ -64,7 +64,8 @@ Bool
       
   257  XFixesRegionInit (void)
       
   258  {
       
   259      RegionResType = CreateNewResourceType(RegionResFree);
       
   260 -    return TRUE;
       
   261 +
       
   262 +    return (RegionResType != 0);
       
   263  }
       
   264  
       
   265  int
       
   266 diff --git a/xkb/xkb.c b/xkb/xkb.c
       
   267 index 35f8d1c..c490f8b 100644
       
   268 --- a/xkb/xkb.c
       
   269 +++ b/xkb/xkb.c
       
   270 @@ -6704,6 +6704,10 @@ XkbExtensionInit(void)
       
   271  {
       
   272      ExtensionEntry *extEntry;
       
   273  
       
   274 +    RT_XKBCLIENT = CreateNewResourceType(XkbClientGone);
       
   275 +    if (!RT_XKBCLIENT)
       
   276 +	return;
       
   277 +
       
   278      if ((extEntry = AddExtension(XkbName, XkbNumberEvents, XkbNumberErrors,
       
   279  				 ProcXkbDispatch, SProcXkbDispatch,
       
   280  				 NULL, StandardMinorOpcode))) {
       
   281 @@ -6711,7 +6715,6 @@ XkbExtensionInit(void)
       
   282  	XkbEventBase = (unsigned char)extEntry->eventBase;
       
   283  	XkbErrorBase = (unsigned char)extEntry->errorBase;
       
   284  	XkbKeyboardErrorCode = XkbErrorBase+XkbKeyboard;
       
   285 -	RT_XKBCLIENT = CreateNewResourceType(XkbClientGone);
       
   286      }
       
   287      return;
       
   288  }
       
   289 -- 
       
   290 1.5.6.5
       
   291