Free all atoms along with keymap

The code to do this is taken from xserver, dix/atom.c.

Signed-off-by: Ran Benita <ran234@gmail.com>
master
Ran Benita 2012-03-01 20:41:34 +02:00
parent d94d9b4522
commit 19e99bb27a
3 changed files with 28 additions and 0 deletions

View File

@ -215,3 +215,26 @@ xkb_intern_atom(const char *string)
else
return None;
}
static void
FreeAtom(NodePtr patom)
{
if (patom->left)
FreeAtom(patom->left);
if (patom->right)
FreeAtom(patom->right);
free(patom->string);
free(patom);
}
void
XkbcFreeAllAtoms(void)
{
if (atomRoot == NULL)
return;
FreeAtom(atomRoot);
atomRoot = NULL;
free(nodeTable);
nodeTable = NULL;
lastAtom = None;
}

View File

@ -29,6 +29,7 @@ authorization from the authors.
#include "xkballoc.h"
#include "xkbrules.h"
#include "xkbpath.h"
#include "xkbmisc.h"
#include "parseutils.h"
#include "utils.h"
@ -315,4 +316,5 @@ void
xkb_free_keymap(struct xkb_desc *xkb)
{
XkbcFreeKeyboard(xkb);
XkbcFreeAllAtoms();
}

View File

@ -70,6 +70,9 @@ XkbcNameMatchesPattern(char *name, char *ptrn);
extern char *
XkbcAtomGetString(uint32_t atom);
extern void
XkbcFreeAllAtoms(void);
/***====================================================================***/
extern const char *