@@ -98,6 +98,7 @@ in this Software without prior written authorization from The Open Group.
9898
9999
100100typedef struct _ShmScrPrivateRec {
101+ Bool initialized ;
101102 ShmFuncsPtr shmFuncs ;
102103} ShmScrPrivateRec ;
103104
@@ -199,28 +200,26 @@ static void
199200ShmScreenClose (CallbackListPtr * pcbl , ScreenPtr pScreen , void * unused )
200201{
201202 ShmScrPrivateRec * screen_priv = ShmGetScreenPriv (pScreen );
202-
203- dixSetPrivate ( & pScreen -> devPrivates , shmScrPrivateKey , NULL ) ;
204- free ( screen_priv );
203+ if ( screen_priv -> initialized ) {
204+ screen_priv -> initialized = FALSE ;
205+ }
205206}
206207
207208static ShmScrPrivateRec *
208209ShmInitScreenPriv (ScreenPtr pScreen )
209210{
210211 ShmScrPrivateRec * screen_priv = ShmGetScreenPriv (pScreen );
211212
212- if (!screen_priv ) {
213- screen_priv = calloc (1 , sizeof (ShmScrPrivateRec ));
214- dixSetPrivate (& pScreen -> devPrivates , shmScrPrivateKey , screen_priv );
215- dixScreenHookClose (pScreen , ShmScreenClose );
213+ if (!screen_priv -> initialized ) {
214+ screen_priv -> initialized = TRUE;
216215 }
217216 return screen_priv ;
218217}
219218
220219static Bool
221220ShmRegisterPrivates (void )
222221{
223- if (!dixRegisterPrivateKey (& shmScrPrivateKeyRec , PRIVATE_SCREEN , 0 ))
222+ if (!dixRegisterPrivateKey (& shmScrPrivateKeyRec , PRIVATE_SCREEN , sizeof ( ShmScrPrivateRec ) ))
224223 return FALSE;
225224 if (!dixRegisterPrivateKey (& shmPixmapPrivateKeyRec , PRIVATE_PIXMAP , 0 ))
226225 return FALSE;
0 commit comments