Xext: dpms: drop internal resource type

This just served for automatic GC when client goes down,
but it's simpler to do it via ClientDestroyCallback.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult
2026-01-19 19:31:33 +01:00
parent f80df94254
commit 957be4344d

View File

@@ -32,6 +32,7 @@ Equipment Corporation.
#include <X11/Xproto.h>
#include <X11/extensions/dpmsproto.h>
#include "dix/client_priv.h"
#include "dix/dix_priv.h"
#include "dix/request_priv.h"
#include "dix/screenint_priv.h"
@@ -61,7 +62,6 @@ CARD32 DPMSOffTime = -1;
Bool DPMSEnabled;
static int DPMSReqCode = 0;
static RESTYPE ClientType; /* resource types for event masks */
struct xorg_list dpms_listeners = { 0 };
@@ -70,21 +70,23 @@ typedef struct _DPMSEvent {
struct xorg_list entry;
DPMSEventPtr next;
ClientPtr client;
XID clientResource;
unsigned int mask;
} DPMSEventRec;
/*ARGSUSED*/ static int
DPMSFreeClient(void *data, XID id)
static void DPMSDeleteClient(ClientPtr pClient)
{
DPMSEventRec *walk, *tmp;
xorg_list_for_each_entry_safe(walk, tmp, &dpms_listeners, entry) {
if (walk == data) {
if (walk->client == pClient) {
xorg_list_del(&walk->entry);
free(walk);
}
}
return 1;
}
static void DPMSClientDestroyCallback(CallbackListPtr *pcbl, void *unused,
void *calldata) {
DPMSDeleteClient((ClientPtr)calldata);
}
static void
@@ -126,27 +128,12 @@ ProcDPMSSelectInput(register ClientPtr client)
return BadAlloc;
pNewEvent->client = client;
pNewEvent->mask = stuff->eventMask;
/*
* add a resource that will be deleted when
* the client goes away
*/
XID clientResource = FakeClientID(client->index);
pNewEvent->clientResource = clientResource;
if (!AddResource(clientResource, ClientType, (void *)pNewEvent))
return BadAlloc;
xorg_list_append(&pNewEvent->entry, &dpms_listeners);
}
else if (stuff->eventMask == 0) {
DPMSEventRec *walk = NULL, *tmp = NULL;
/* delete the interest */
xorg_list_for_each_entry_safe(walk, tmp, &dpms_listeners, entry) {
if (walk->client == client) {
xorg_list_del(&walk->entry);
FreeResource(walk->clientResource, ClientType);
free(walk);
}
}
DPMSDeleteClient(client);
}
else {
client->errorValue = stuff->eventMask;
@@ -425,7 +412,6 @@ DPMSCloseDownExtension(ExtensionEntry *e)
DPMSEventRec *walk, *tmp;
xorg_list_for_each_entry_safe(walk, tmp, &dpms_listeners, entry) {
FreeResource(walk->clientResource, ClientType);
xorg_list_del(&walk->entry);
free(walk);
}
@@ -450,9 +436,9 @@ DPMSExtensionInit(void)
DPMSPowerLevel = DPMSModeOn;
DPMSEnabled = DPMSSupported();
ClientType = CreateNewResourceType(DPMSFreeClient, "DPMSClient");
AddCallback(&ClientDestroyCallback, DPMSClientDestroyCallback, NULL);
if (DPMSEnabled && ClientType &&
if (DPMSEnabled &&
(extEntry = AddExtension(DPMSExtensionName, 0, 0,
ProcDPMSDispatch, ProcDPMSDispatch,
DPMSCloseDownExtension, StandardMinorOpcode))) {