- if (core_initialized > 1)
- core_initialized--;
- else
- {
- core_initialized = 0;
- MDEBUG_PUSH_TIME ();
- MDEBUG_PUSH_TIME ();
- MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize chartable module."));
- mchartable__fini ();
- MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize textprop module."));
- mtext__prop_fini ();
- MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize mtext module."));
- mtext__fini ();
- MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize symbol module."));
- msymbol__fini ();
- MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize plist module."));
- mplist__fini ();
- MDEBUG_POP_TIME ();
- MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize the core modules."));
- MDEBUG_POP_TIME ();
- }
- report_header_printed = 0;
+ if (m17n__core_initialized == 0
+ || --m17n__core_initialized > 0)
+ return;
+
+ MDEBUG_PUSH_TIME ();
+ MDEBUG_PUSH_TIME ();
+ mchartable__fini ();
+ MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize chartable module."));
+ mtext__fini ();
+ MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize mtext module."));
+ msymbol__fini ();
+ MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize symbol module."));
+ mplist__fini ();
+ MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize plist module."));
+ /* We must call this after the aboves because it frees interval
+ pools. */
+ mtext__prop_fini ();
+ MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize textprop module."));
+ MDEBUG_POP_TIME ();
+ MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize the core modules."));
+ MDEBUG_POP_TIME ();
+ if (mdebug__flags[MDEBUG_FINI])
+ report_object_array ();
+ msymbol__free_table ();
+ if (mdebug__output != stderr)
+ fclose (mdebug__output);