summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dix/devices.c1
-rw-r--r--include/xkbsrv.h3
-rw-r--r--xkb/xkbInit.c15
3 files changed, 19 insertions, 0 deletions
diff --git a/dix/devices.c b/dix/devices.c
index fa94a9438..0c718d204 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -1052,6 +1052,7 @@ CloseDownDevices(void)
inputInfo.pointer = NULL;
XkbDeleteRulesDflts();
+ XkbDeleteRulesUsed();
OsReleaseSignals();
}
diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index 45e2e8c47..346ebccf0 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -751,6 +751,9 @@ extern _X_EXPORT void XkbSetRulesDflts(XkbRMLVOSet * /* rmlvo */
extern _X_EXPORT void XkbDeleteRulesDflts(void
);
+extern _X_EXPORT void XkbDeleteRulesUsed(void
+ );
+
extern _X_EXPORT int SProcXkbDispatch(ClientPtr /* client */
);
diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c
index 4e8e267da..244c353c6 100644
--- a/xkb/xkbInit.c
+++ b/xkb/xkbInit.c
@@ -251,6 +251,21 @@ XkbSetRulesDflts(XkbRMLVOSet * rmlvo)
}
void
+XkbDeleteRulesUsed(void)
+{
+ free(XkbRulesUsed);
+ XkbRulesUsed = NULL;
+ free(XkbModelUsed);
+ XkbModelUsed = NULL;
+ free(XkbLayoutUsed);
+ XkbLayoutUsed = NULL;
+ free(XkbVariantUsed);
+ XkbVariantUsed = NULL;
+ free(XkbOptionsUsed);
+ XkbOptionsUsed = NULL;
+}
+
+void
XkbDeleteRulesDflts(void)
{
free(XkbRulesDflt);