RWS@ZERMATT.LCS.MIT.EDU (Robert Scheifler) (10/28/87)
Date: Thu, 22 Oct 87 09:42:56 PDT From: deboor%dill.Berkeley.EDU@berkeley.edu (Adam R de Boor) SYNOPSIS: in server/dix/dispatch.c, function FlushClientCaches, there is a == where there should be a =, thus preventing caches from being flushed correctly. DESCRIPTION: From the name of the function, I assume FlushClientCaches is supposed to remove all references to a resource id from every active client's cache, but the statement if (client == clients[i]) restricts FlushClientCaches' attention to only the client that owns the resource. FIX: While we're noticing, eliminate use of a magic number. in server/dix/dispatch.c: *** /tmp/,RCSt1006770 Wed Oct 28 14:06:22 1987 --- dispatch.c Wed Oct 28 14:00:26 1987 *************** *** 1,4 **** ! /* $Header: dispatch.c,v 1.18 87/10/15 11:34:40 rws Exp $ */ /************************************************************ Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, and the Massachusetts Institute of Technology, Cambridge, Massachusetts. --- 1,4 ---- ! /* $Header: dispatch.c,v 1.19 87/10/28 13:58:51 rws Exp $ */ /************************************************************ Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, and the Massachusetts Institute of Technology, Cambridge, Massachusetts. *************** *** 147,153 **** if ((pGC->depth != pDraw->depth) || (pGC->pScreen != pDraw->pScreen))\ {\ client->errorValue = stuff->gc;\ ! client->lastGCID = -1;\ return (BadMatch);\ }\ }\ --- 147,153 ---- if ((pGC->depth != pDraw->depth) || (pGC->pScreen != pDraw->pScreen))\ {\ client->errorValue = stuff->gc;\ ! client->lastGCID = INVALID;\ return (BadMatch);\ }\ }\ *************** *** 195,206 **** return ; for (i=0; i<currentMaxClients; i++) { ! if (client == clients[i]) { if (client->lastDrawableID == id) client->lastDrawableID = INVALID; else if (client->lastGCID == id) ! client->lastGCID = -1; } } } --- 195,207 ---- return ; for (i=0; i<currentMaxClients; i++) { ! client = clients[i]; ! if (client != NullClient) { if (client->lastDrawableID == id) client->lastDrawableID = INVALID; else if (client->lastGCID == id) ! client->lastGCID = INVALID; } } } *************** *** 3048,3054 **** client->lastDrawable = (DrawablePtr) NULL; client->lastDrawableID = INVALID; client->lastGC = (GCPtr) NULL; ! client->lastGCID = -1; client->numSaved = 0; client->saveSet = (pointer *)NULL; client->noClientException = Success; --- 3049,3055 ---- client->lastDrawable = (DrawablePtr) NULL; client->lastDrawableID = INVALID; client->lastGC = (GCPtr) NULL; ! client->lastGCID = INVALID; client->numSaved = 0; client->saveSet = (pointer *)NULL; client->noClientException = Success;