Xi: reset the known properties at the end of the server generation.
Properties allocated through XIGetKnownProperty() aren't reset on the second server generation but keep the old value. As a result, wrong Atoms are supplied to the driver, resulting in potential data corruption or weird error message. Reproducible by running "xlsatom | grep FLOAT" twice on a plain X server. The second X server generation won't have the FLOAT atom defined anymore, despite the users of this atom not noticing any errors. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Julien Cristau <jcristau@debian.org> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
72758287f7
commit
9802839d35
|
@ -1122,6 +1122,7 @@ RestoreExtensionEvents(void)
|
||||||
static void
|
static void
|
||||||
IResetProc(ExtensionEntry * unused)
|
IResetProc(ExtensionEntry * unused)
|
||||||
{
|
{
|
||||||
|
XIResetProperties();
|
||||||
|
|
||||||
ReplySwapVector[IReqCode] = ReplyNotSwappd;
|
ReplySwapVector[IReqCode] = ReplyNotSwappd;
|
||||||
EventSwapVector[DeviceValuator] = NotImplemented;
|
EventSwapVector[DeviceValuator] = NotImplemented;
|
||||||
|
|
|
@ -403,6 +403,15 @@ XIGetKnownProperty(char *name)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
XIResetProperties(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < (sizeof(dev_properties)/sizeof(struct dev_properties)); i++)
|
||||||
|
dev_properties[i].type = None;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert the given property's value(s) into @nelem_return integer values and
|
* Convert the given property's value(s) into @nelem_return integer values and
|
||||||
* store them in @buf_return. If @nelem_return is larger than the number of
|
* store them in @buf_return. If @nelem_return is larger than the number of
|
||||||
|
|
|
@ -62,4 +62,7 @@ void SRepXIListProperties(ClientPtr client, int size,
|
||||||
xXIListPropertiesReply *rep);
|
xXIListPropertiesReply *rep);
|
||||||
void SRepXIGetProperty(ClientPtr client, int size,
|
void SRepXIGetProperty(ClientPtr client, int size,
|
||||||
xXIGetPropertyReply *rep);
|
xXIGetPropertyReply *rep);
|
||||||
|
|
||||||
|
void XIResetProperties(void);
|
||||||
|
|
||||||
#endif /* XIPROPERTY_H */
|
#endif /* XIPROPERTY_H */
|
||||||
|
|
Loading…
Reference in New Issue