dix: reset the registry before quitting
authorPeter Hutterer <peter.hutterer@who-t.net>
Mon, 27 Feb 2012 08:59:45 +0000 (18:59 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Mon, 6 May 2013 23:41:02 +0000 (09:41 +1000)
Heaps of these:
==2042== 15,360 bytes in 120 blocks are still reachable in loss record 94 of
97
==2042==    at 0x4C2A4CD: malloc (vg_replace_malloc.c:236)
==2042==    by 0x4C2A657: realloc (vg_replace_malloc.c:525)
==2042==    by 0x45FB91: double_size (registry.c:65)
==2042==    by 0x45FC97: RegisterRequestName (registry.c:85)
==2042==    by 0x460095: RegisterExtensionNames (registry.c:179)
==2042==    by 0x460729: dixResetRegistry (registry.c:334)
==2042==    by 0x5AC992: main (main.c:201)

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Keith Packard <keithp@keithp.com>
dix/main.c
dix/registry.c
include/registry.h

index c46e40a..1fa0504 100644 (file)
@@ -358,6 +358,8 @@ main(int argc, char *argv[], char *envp[])
         dixFreePrivates(serverClient->devPrivates, PRIVATE_CLIENT);
         serverClient->devPrivates = NULL;
 
+       dixFreeRegistry();
+
         FreeFonts();
 
         FreeAllAtoms();
index 5bad0fd..82a3340 100644 (file)
@@ -280,14 +280,9 @@ LookupResourceName(RESTYPE resource)
     return resources[resource] ? resources[resource] : XREGISTRY_UNKNOWN;
 }
 
-/*
- * Setup and teardown
- */
 void
-dixResetRegistry(void)
+dixFreeRegistry(void)
 {
-    ExtensionEntry extEntry = { .name = CORE };
-
     /* Free all memory */
     while (nmajor--) {
         while (nminor[nmajor])
@@ -315,9 +310,23 @@ dixResetRegistry(void)
 
     nmajor = nevent = nerror = nresource = 0;
 
+    if (fh) {
+       fclose(fh);
+        fh = NULL;
+    }
+}
+
+/*
+ * Setup and teardown
+ */
+void
+dixResetRegistry(void)
+{
+    ExtensionEntry extEntry = { .name = CORE };
+
+    dixFreeRegistry();
+
     /* Open the protocol file */
-    if (fh)
-        fclose(fh);
     fh = fopen(FILENAME, "r");
     if (!fh)
         LogMessage(X_WARNING,
index f471b89..e298ab6 100644 (file)
@@ -44,6 +44,7 @@ extern _X_EXPORT const char *LookupResourceName(RESTYPE rtype);
  * Setup and teardown
  */
 extern _X_EXPORT void dixResetRegistry(void);
+extern _X_EXPORT void dixFreeRegistry(void);
 
 #else                           /* XREGISTRY */