dix: Small refactor to resource deletion
Reviewed-by: Matt Turner <mattst88@gmail.com> Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
parent
3e0b311aba
commit
f1c2c01ac9
|
@ -562,6 +562,17 @@ RebuildTable(int client)
|
||||||
clientTable[client].resources = resources;
|
clientTable[client].resources = resources;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
doFreeResource(ResourcePtr res, Bool skip)
|
||||||
|
{
|
||||||
|
CallResourceStateCallback(ResourceStateFreeing, res);
|
||||||
|
|
||||||
|
if (!skip)
|
||||||
|
resourceTypes[res->type & TypeMask].deleteFunc(res->value, res->id);
|
||||||
|
|
||||||
|
free(res);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
FreeResource(XID id, RESTYPE skipDeleteFuncType)
|
FreeResource(XID id, RESTYPE skipDeleteFuncType)
|
||||||
{
|
{
|
||||||
|
@ -590,11 +601,8 @@ FreeResource(XID id, RESTYPE skipDeleteFuncType)
|
||||||
*prev = res->next;
|
*prev = res->next;
|
||||||
elements = --*eltptr;
|
elements = --*eltptr;
|
||||||
|
|
||||||
CallResourceStateCallback(ResourceStateFreeing, res);
|
doFreeResource(res, rtype == skipDeleteFuncType);
|
||||||
|
|
||||||
if (rtype != skipDeleteFuncType)
|
|
||||||
(*resourceTypes[rtype & TypeMask].deleteFunc)(res->value, res->id);
|
|
||||||
free(res);
|
|
||||||
if (*eltptr != elements)
|
if (*eltptr != elements)
|
||||||
prev = head; /* prev may no longer be valid */
|
prev = head; /* prev may no longer be valid */
|
||||||
}
|
}
|
||||||
|
@ -604,7 +612,6 @@ FreeResource(XID id, RESTYPE skipDeleteFuncType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FreeResourceByType(XID id, RESTYPE type, Bool skipFree)
|
FreeResourceByType(XID id, RESTYPE type, Bool skipFree)
|
||||||
{
|
{
|
||||||
|
@ -627,11 +634,8 @@ FreeResourceByType(XID id, RESTYPE type, Bool skipFree)
|
||||||
*prev = res->next;
|
*prev = res->next;
|
||||||
clientTable[cid].elements--;
|
clientTable[cid].elements--;
|
||||||
|
|
||||||
CallResourceStateCallback(ResourceStateFreeing, res);
|
doFreeResource(res, skipFree);
|
||||||
|
|
||||||
if (!skipFree)
|
|
||||||
(*resourceTypes[type & TypeMask].deleteFunc)(res->value, res->id);
|
|
||||||
free(res);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -793,12 +797,10 @@ FreeClientNeverRetainResources(ClientPtr client)
|
||||||
#endif
|
#endif
|
||||||
*prev = this->next;
|
*prev = this->next;
|
||||||
clientTable[client->index].elements--;
|
clientTable[client->index].elements--;
|
||||||
|
|
||||||
CallResourceStateCallback(ResourceStateFreeing, this);
|
|
||||||
|
|
||||||
elements = *eltptr;
|
elements = *eltptr;
|
||||||
(*resourceTypes[rtype & TypeMask].deleteFunc)(this->value, this->id);
|
|
||||||
free(this);
|
doFreeResource(this, FALSE);
|
||||||
|
|
||||||
if (*eltptr != elements)
|
if (*eltptr != elements)
|
||||||
prev = &resources[j]; /* prev may no longer be valid */
|
prev = &resources[j]; /* prev may no longer be valid */
|
||||||
}
|
}
|
||||||
|
@ -841,7 +843,6 @@ FreeClientResources(ClientPtr client)
|
||||||
|
|
||||||
for (this = *head; this; this = *head)
|
for (this = *head; this; this = *head)
|
||||||
{
|
{
|
||||||
RESTYPE rtype = this->type;
|
|
||||||
#ifdef XSERVER_DTRACE
|
#ifdef XSERVER_DTRACE
|
||||||
XSERVER_RESOURCE_FREE(this->id, this->type,
|
XSERVER_RESOURCE_FREE(this->id, this->type,
|
||||||
this->value, TypeNameString(this->type));
|
this->value, TypeNameString(this->type));
|
||||||
|
@ -849,10 +850,7 @@ FreeClientResources(ClientPtr client)
|
||||||
*head = this->next;
|
*head = this->next;
|
||||||
clientTable[client->index].elements--;
|
clientTable[client->index].elements--;
|
||||||
|
|
||||||
CallResourceStateCallback(ResourceStateFreeing, this);
|
doFreeResource(this, FALSE);
|
||||||
|
|
||||||
(*resourceTypes[rtype & TypeMask].deleteFunc)(this->value, this->id);
|
|
||||||
free(this);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(clientTable[client->index].resources);
|
free(clientTable[client->index].resources);
|
||||||
|
|
Loading…
Reference in New Issue