static int dfb_core_shutdown( CoreDFB *core, bool emergency ) { CoreDFBShared *shared; D_MAGIC_ASSERT( core, CoreDFB ); shared = core->shared; D_MAGIC_ASSERT( shared, CoreDFBShared ); /* Suspend input core to stop all input threads before shutting down. */ if (dfb_input_core.initialized) dfb_input_core.Suspend( dfb_input_core.data_local ); /* Destroy window objects. */ fusion_object_pool_destroy( shared->window_pool, core->world ); /* Close window stacks. */ if (dfb_wm_core.initialized) dfb_wm_close_all_stacks( dfb_wm_core.data_local ); fusion_stop_dispatcher( core->world, emergency ); /* Destroy layer context and region objects. */ fusion_object_pool_destroy( shared->layer_region_pool, core->world ); fusion_object_pool_destroy( shared->layer_context_pool, core->world ); /* Shutdown WM core. */ dfb_core_part_shutdown( core, &dfb_wm_core, emergency ); /* Shutdown layer core. */ dfb_core_part_shutdown( core, &dfb_layer_core, emergency ); dfb_core_part_shutdown( core, &dfb_screen_core, emergency ); /* Destroy surface and palette objects. */ fusion_object_pool_destroy( shared->graphics_state_pool, core->world ); fusion_object_pool_destroy( shared->surface_pool, core->world ); fusion_object_pool_destroy( shared->palette_pool, core->world ); /* Destroy remaining core parts. */ dfb_core_part_shutdown( core, &dfb_graphics_core, emergency ); dfb_core_part_shutdown( core, &dfb_surface_core, emergency ); dfb_core_part_shutdown( core, &dfb_input_core, emergency ); dfb_core_part_shutdown( core, &dfb_system_core, emergency ); dfb_core_part_shutdown( core, &dfb_colorhash_core, emergency ); dfb_core_part_shutdown( core, &dfb_clipboard_core, emergency ); /* Destroy shared memory pool for surface data. */ fusion_shm_pool_destroy( core->world, shared->shmpool_data ); return 0; }
static int dfb_core_shutdown( CoreDFB *core, bool emergency ) { CoreDFBShared *shared; D_MAGIC_ASSERT( core, CoreDFB ); shared = core->shared; D_MAGIC_ASSERT( shared, CoreDFBShared ); /* Destroy layer context and region objects. */ fusion_object_pool_destroy( shared->layer_region_pool, core->world ); fusion_object_pool_destroy( shared->layer_context_pool, core->world ); /* Shutdown WM core. */ dfb_core_part_shutdown( core, &dfb_wm_core, emergency ); /* Destroy window objects. */ fusion_object_pool_destroy( shared->window_pool, core->world ); /* Shutdown layer core. */ dfb_core_part_shutdown( core, &dfb_layer_core, emergency ); dfb_core_part_shutdown( core, &dfb_screen_core, emergency ); /* Destroy surface and palette objects. */ fusion_object_pool_destroy( shared->surface_pool, core->world ); fusion_object_pool_destroy( shared->palette_pool, core->world ); /* Destroy remaining core parts. */ dfb_core_part_shutdown( core, &dfb_graphics_core, emergency ); dfb_core_part_shutdown( core, &dfb_surface_core, emergency ); dfb_core_part_shutdown( core, &dfb_input_core, emergency ); dfb_core_part_shutdown( core, &dfb_system_core, emergency ); dfb_core_part_shutdown( core, &dfb_colorhash_core, emergency ); dfb_core_part_shutdown( core, &dfb_clipboard_core, emergency ); /* Destroy shared memory pool for surface data. */ fusion_shm_pool_destroy( core->world, shared->shmpool_data ); return 0; }