void gegl_exit (void) { glong timing = gegl_ticks (); gegl_tile_storage_cache_cleanup (); gegl_tile_cache_destroy (); gegl_operation_gtype_cleanup (); gegl_extension_handler_cleanup (); if (module_db != NULL) { g_object_unref (module_db); module_db = NULL; } babl_exit (); timing = gegl_ticks () - timing; gegl_instrument ("gegl", "gegl_exit", timing); /* used when tracking buffer and tile leaks */ if (g_getenv ("GEGL_DEBUG_BUFS") != NULL) { gegl_buffer_stats (); gegl_tile_backend_ram_stats (); gegl_tile_backend_file_stats (); #if HAVE_GIO gegl_tile_backend_tiledir_stats (); #endif } global_time = gegl_ticks () - global_time; gegl_instrument ("gegl", "gegl", global_time); if (g_getenv ("GEGL_DEBUG_TIME") != NULL) { g_printf ("\n%s", gegl_instrument_utf8 ()); } if (gegl_buffer_leaks ()) g_printf (" buffer-leaks: %i\n", gegl_buffer_leaks ()); gegl_tile_cache_destroy (); if (gegl_swap_dir ()) { /* remove all files matching <$GEGL_SWAP>/GEGL-<pid>-*.swap */ guint pid = getpid (); GDir *dir = g_dir_open (gegl_swap_dir (), 0, NULL); gchar *glob = g_strdup_printf ("%i-*", pid); GPatternSpec *pattern = g_pattern_spec_new (glob); g_free (glob); if (dir != NULL) { const gchar *name; while ((name = g_dir_read_name (dir)) != NULL) { if (g_pattern_match_string (pattern, name)) { gchar *fname = g_build_filename (gegl_swap_dir (), name, NULL); g_unlink (fname); g_free (fname); } } g_dir_close (dir); } g_pattern_spec_free (pattern); } g_object_unref (config); config = NULL; }
void gegl_exit (void) { if (!config) { g_warning("gegl_exit() called without matching call to gegl_init()"); return; } GEGL_INSTRUMENT_START() gegl_tile_backend_swap_cleanup (); gegl_tile_cache_destroy (); gegl_operation_gtype_cleanup (); gegl_extension_handler_cleanup (); gegl_random_cleanup (); gegl_cl_cleanup (); gegl_temp_buffer_free (); if (module_db != NULL) { g_object_unref (module_db); module_db = NULL; } babl_exit (); GEGL_INSTRUMENT_END ("gegl", "gegl_exit") /* used when tracking buffer and tile leaks */ if (g_getenv ("GEGL_DEBUG_BUFS") != NULL) { gegl_buffer_stats (); gegl_tile_backend_ram_stats (); gegl_tile_backend_file_stats (); } global_time = gegl_ticks () - global_time; gegl_instrument ("gegl", "gegl", global_time); if (gegl_instrument_enabled) { g_printf ("\n%s", gegl_instrument_utf8 ()); } if (gegl_buffer_leaks ()) { g_printf ("EEEEeEeek! %i GeglBuffers leaked\n", gegl_buffer_leaks ()); #ifdef GEGL_ENABLE_DEBUG if (!(gegl_debug_flags & GEGL_DEBUG_BUFFER_ALLOC)) g_printerr ("To debug GeglBuffer leaks, set the environment " "variable GEGL_DEBUG to \"buffer-alloc\"\n"); #endif } gegl_tile_cache_destroy (); if (gegl_swap_dir ()) { /* remove all files matching <$GEGL_SWAP>/GEGL-<pid>-*.swap */ guint pid = getpid (); GDir *dir = g_dir_open (gegl_swap_dir (), 0, NULL); gchar *glob = g_strdup_printf ("%i-*", pid); GPatternSpec *pattern = g_pattern_spec_new (glob); g_free (glob); if (dir != NULL) { const gchar *name; while ((name = g_dir_read_name (dir)) != NULL) { if (g_pattern_match_string (pattern, name)) { gchar *fname = g_build_filename (gegl_swap_dir (), name, NULL); g_unlink (fname); g_free (fname); } } g_dir_close (dir); } g_pattern_spec_free (pattern); } g_object_unref (config); config = NULL; global_time = 0; }