void dt_opencl_cleanup(dt_opencl_t *cl) { if(cl->inited) { dt_bilateral_free_cl_global(cl->bilateral); dt_gaussian_free_cl_global(cl->gaussian); for(int i=0; i<cl->num_devs; i++) { dt_pthread_mutex_destroy(&cl->dev[i].lock); for(int k=0; k<DT_OPENCL_MAX_KERNELS; k++) if(cl->dev[i].kernel_used [k]) (cl->dlocl->symbols->dt_clReleaseKernel) (cl->dev[i].kernel [k]); for(int k=0; k<DT_OPENCL_MAX_PROGRAMS; k++) if(cl->dev[i].program_used[k]) (cl->dlocl->symbols->dt_clReleaseProgram)(cl->dev[i].program[k]); (cl->dlocl->symbols->dt_clReleaseCommandQueue)(cl->dev[i].cmd_queue); (cl->dlocl->symbols->dt_clReleaseContext)(cl->dev[i].context); dt_opencl_events_reset(i); if(cl->dev[i].eventlist) free(cl->dev[i].eventlist); if(cl->dev[i].eventtags) free(cl->dev[i].eventtags); } } if(cl->dlocl) { free(cl->dlocl->symbols); free(cl->dlocl); } dt_pthread_mutex_destroy(&cl->lock); }
void dt_control_job_dispose(_dt_job_t *job) { if(!job) return; dt_control_job_set_state(job, DT_JOB_STATE_DISPOSED); dt_pthread_mutex_destroy(&job->state_mutex); dt_pthread_mutex_destroy(&job->wait_mutex); free(job); }
void dt_control_job_dispose(_dt_job_t *job) { if(!job) return; if(job->progress) dt_control_progress_destroy(darktable.control, job->progress); job->progress = NULL; dt_control_job_set_state(job, DT_JOB_STATE_DISPOSED); if(job->params_destroy) job->params_destroy(job->params); dt_pthread_mutex_destroy(&job->state_mutex); dt_pthread_mutex_destroy(&job->wait_mutex); free(job); }
void dt_control_cleanup(dt_control_t *s) { // vacuum TODO: optional? // DT_DEBUG_SQLITE3_EXEC(dt_database_get(darktable.db), "PRAGMA incremental_vacuum(0)", NULL, NULL, NULL); // DT_DEBUG_SQLITE3_EXEC(dt_database_get(darktable.db), "vacuum", NULL, NULL, NULL); dt_pthread_mutex_destroy(&s->queue_mutex); dt_pthread_mutex_destroy(&s->cond_mutex); dt_pthread_mutex_destroy(&s->log_mutex); dt_pthread_mutex_destroy(&s->run_mutex); pthread_rwlock_destroy(&s->xprofile_lock); if (s->accelerator_list) { g_slist_free_full(s->accelerator_list, g_free); } }
void dt_control_progress_destroy(dt_control_t *control, dt_progress_t *progress) { dt_pthread_mutex_lock(&control->progress_system.mutex); // tell the gui if(control->progress_system.proxy.module != NULL) control->progress_system.proxy.destroyed(control->progress_system.proxy.module, progress->gui_data); // remove the object from the global list control->progress_system.list = g_list_remove(control->progress_system.list, progress); control->progress_system.list_length--; dt_pthread_mutex_unlock(&control->progress_system.mutex); #ifdef HAVE_UNITY if(progress->has_progress_bar) { unity_launcher_entry_set_progress(progress->darktable_launcher, 1.0); unity_launcher_entry_set_progress_visible(progress->darktable_launcher, FALSE); } #endif // free the object dt_pthread_mutex_destroy(&progress->mutex); g_free(progress->message); free(progress); }
void dt_cache_cleanup(dt_cache_t *cache) { g_hash_table_destroy(cache->hashtable); GList *l = cache->lru; while(l) { dt_cache_entry_t *entry = (dt_cache_entry_t *)l->data; if(cache->cleanup) { assert(entry->data_size); ASAN_UNPOISON_MEMORY_REGION(entry->data, entry->data_size); cache->cleanup(cache->cleanup_data, entry); } else dt_free_align(entry->data); dt_pthread_rwlock_destroy(&entry->lock); g_slice_free1(sizeof(*entry), entry); l = g_list_next(l); } g_list_free(cache->lru); dt_pthread_mutex_destroy(&cache->lock); }
void dt_control_progress_destroy(dt_control_t *control, dt_progress_t *progress) { dt_pthread_mutex_lock(&control->progress_system.mutex); // tell the gui if(control->progress_system.proxy.module != NULL) control->progress_system.proxy.destroyed(control->progress_system.proxy.module, progress->gui_data); // remove the object from the global list control->progress_system.list = g_list_remove(control->progress_system.list, progress); control->progress_system.list_length--; dt_pthread_mutex_unlock(&control->progress_system.mutex); #ifdef HAVE_UNITY if(progress->has_progress_bar) { unity_launcher_entry_set_progress(progress->darktable_launcher, 1.0); unity_launcher_entry_set_progress_visible(progress->darktable_launcher, FALSE); } #endif #ifdef MAC_INTEGRATION #ifdef GTK_TYPE_OSX_APPLICATION gtk_osxapplication_attention_request(g_object_new(GTK_TYPE_OSX_APPLICATION, NULL), INFO_REQUEST); #else gtkosx_application_attention_request(g_object_new(GTKOSX_TYPE_APPLICATION, NULL), INFO_REQUEST); #endif #endif // free the object dt_pthread_mutex_destroy(&progress->mutex); free(progress); }
void gui_cleanup(struct dt_iop_module_t *self) { dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t *)self->gui_data; GList *instances = darktable.develop->proxy.exposure; while(instances != NULL) { GList *next = g_list_next(instances); dt_dev_proxy_exposure_t *instance = (dt_dev_proxy_exposure_t *)instances->data; if(instance->module == self) { g_free(instance); darktable.develop->proxy.exposure = g_list_delete_link(darktable.develop->proxy.exposure, instances); } instances = next; } free(g->deflicker_histogram); g->deflicker_histogram = NULL; g_list_free(g->deflicker_histogram_sources); g_list_free(g->modes); dt_pthread_mutex_destroy(&g->lock); free(self->gui_data); self->gui_data = NULL; }
void gui_cleanup(struct dt_iop_module_t *self) { dt_iop_global_tonemap_gui_data_t *g = (dt_iop_global_tonemap_gui_data_t *)self->gui_data; dt_pthread_mutex_destroy(&g->lock); free(self->gui_data); self->gui_data = NULL; }
void dt_dev_cleanup(dt_develop_t *dev) { if(!dev) return; // image_cache does not have to be unref'd, this is done outside develop module. if(dev->pipe) { dt_dev_pixelpipe_cleanup(dev->pipe); free(dev->pipe); } if(dev->preview_pipe) { dt_dev_pixelpipe_cleanup(dev->preview_pipe); free(dev->preview_pipe); } while(dev->history) { free(((dt_dev_history_item_t *)dev->history->data)->params); free(((dt_dev_history_item_t *)dev->history->data)->blend_params); free( (dt_dev_history_item_t *)dev->history->data); dev->history = g_list_delete_link(dev->history, dev->history); } while(dev->iop) { dt_iop_cleanup_module((dt_iop_module_t *)dev->iop->data); free(dev->iop->data); dev->iop = g_list_delete_link(dev->iop, dev->iop); } dt_pthread_mutex_destroy(&dev->history_mutex); free(dev->histogram); free(dev->histogram_pre_tonecurve); free(dev->histogram_pre_levels); }
void dt_film_cleanup(dt_film_t *film) { dt_pthread_mutex_destroy(&film->images_mutex); if(film->dir) { g_dir_close(film->dir); film->dir = NULL; } }
void gui_cleanup(dt_iop_module_t *self) { // nothing else necessary, gtk will clean up the slider. dt_iop_bilat_gui_data_t *g = (dt_iop_bilat_gui_data_t *)self->gui_data; local_laplacian_boundary_free(&g->ll_boundary); dt_pthread_mutex_destroy(&g->lock); free(self->gui_data); self->gui_data = NULL; }
void gui_cleanup(dt_iop_module_t *self) { dt_iop_levels_gui_data_t *g = (dt_iop_levels_gui_data_t *)self->gui_data; g_list_free(g->modes); dt_pthread_mutex_destroy(&g->lock); free(self->gui_data); self->gui_data = NULL; }
void gui_cleanup(struct dt_iop_module_t *self) { dt_control_signal_disconnect(darktable.signals, G_CALLBACK(_iop_zonesystem_redraw_preview_callback), self); dt_iop_zonesystem_gui_data_t *g = (dt_iop_zonesystem_gui_data_t *)self->gui_data; dt_pthread_mutex_destroy(&g->lock); self->request_color_pick = 0; free(self->gui_data); self->gui_data = NULL; }
void dt_dev_cleanup(dt_develop_t *dev) { if(!dev) return; // image_cache does not have to be unref'd, this is done outside develop module. dt_pthread_mutex_destroy(&dev->pipe_mutex); dt_pthread_mutex_destroy(&dev->preview_pipe_mutex); if(dev->pipe) { dt_dev_pixelpipe_cleanup(dev->pipe); free(dev->pipe); } if(dev->preview_pipe) { dt_dev_pixelpipe_cleanup(dev->preview_pipe); free(dev->preview_pipe); } while(dev->history) { free(((dt_dev_history_item_t *)dev->history->data)->params); free(((dt_dev_history_item_t *)dev->history->data)->blend_params); free( (dt_dev_history_item_t *)dev->history->data); dev->history = g_list_delete_link(dev->history, dev->history); } while(dev->iop) { dt_iop_cleanup_module((dt_iop_module_t *)dev->iop->data); free(dev->iop->data); dev->iop = g_list_delete_link(dev->iop, dev->iop); } dt_pthread_mutex_destroy(&dev->history_mutex); free(dev->histogram); free(dev->histogram_pre_tonecurve); free(dev->histogram_pre_levels); dt_conf_set_int("darkroom/ui/overexposed/colorscheme", dev->overexposed.colorscheme); dt_conf_set_int("darkroom/ui/overexposed/lower", dev->overexposed.lower); dt_conf_set_int("darkroom/ui/overexposed/upper", dev->overexposed.upper); }
void dt_fswatch_destroy(const dt_fswatch_t *fswatch) { dt_print(DT_DEBUG_FSWATCH,"[fswatch_destroy] Destroying context %lx\n",(unsigned long int)fswatch); dt_fswatch_t *ctx=(dt_fswatch_t *)fswatch; dt_pthread_mutex_destroy(&ctx->mutex); GList *item=g_list_first(fswatch->items); while(item) { g_free( item->data ); item=g_list_next(item); } g_list_free(fswatch->items); g_free(ctx); }
void gui_cleanup(struct dt_iop_module_t *self) { dt_control_signal_disconnect(darktable.signals, G_CALLBACK(_iop_zonesystem_redraw_preview_callback), self); dt_iop_zonesystem_gui_data_t *g = (dt_iop_zonesystem_gui_data_t *)self->gui_data; g_free(g->in_preview_buffer); g_free(g->out_preview_buffer); if(g->image) cairo_surface_destroy(g->image); free(g->image_buffer); dt_pthread_mutex_destroy(&g->lock); self->request_color_pick = DT_REQUEST_COLORPICK_OFF; free(self->gui_data); self->gui_data = NULL; }
void dt_film_cleanup(dt_film_t *film) { dt_pthread_mutex_destroy(&film->images_mutex); if(film->dir) { g_dir_close(film->dir); film->dir = NULL; } // if the film is empty => remove it again. if(dt_film_is_empty(film->id)) { dt_film_remove(film->id); } }
void gui_cleanup(struct dt_iop_module_t *self) { dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t *)self->gui_data; free(g->deflicker_histogram); g->deflicker_histogram = NULL; g_list_free(g->deflicker_histogram_sources); g_list_free(g->modes); dt_pthread_mutex_destroy(&g->lock); free(self->gui_data); self->gui_data = NULL; }
void dt_fswatch_destroy(const dt_fswatch_t *fswatch) { dt_print(DT_DEBUG_FSWATCH,"[fswatch_destroy] Destroying context %p\n", fswatch); dt_fswatch_t *ctx=(dt_fswatch_t *)fswatch; dt_pthread_mutex_destroy(&ctx->mutex); //FIXME: g_list_free_full maybe? GList *item=g_list_first(fswatch->items); while(item) { g_free( item->data ); item=g_list_next(item); } g_list_free(fswatch->items); g_free(ctx); }
void dt_cleanup() { const int init_gui = (darktable.gui != NULL); #ifdef HAVE_PRINT dt_printers_abort_discovery(); #endif #ifdef USE_LUA dt_lua_finalize_early(); #endif if(init_gui) { dt_ctl_switch_mode_to(""); dt_dbus_destroy(darktable.dbus); dt_control_shutdown(darktable.control); dt_lib_cleanup(darktable.lib); free(darktable.lib); } #ifdef USE_LUA dt_lua_finalize(); #endif dt_view_manager_cleanup(darktable.view_manager); free(darktable.view_manager); if(init_gui) { dt_imageio_cleanup(darktable.imageio); free(darktable.imageio); free(darktable.gui); } dt_image_cache_cleanup(darktable.image_cache); free(darktable.image_cache); dt_mipmap_cache_cleanup(darktable.mipmap_cache); free(darktable.mipmap_cache); if(init_gui) { dt_control_cleanup(darktable.control); free(darktable.control); dt_undo_cleanup(darktable.undo); } dt_colorspaces_cleanup(darktable.color_profiles); dt_conf_cleanup(darktable.conf); free(darktable.conf); dt_points_cleanup(darktable.points); free(darktable.points); dt_iop_unload_modules_so(); dt_opencl_cleanup(darktable.opencl); free(darktable.opencl); #ifdef HAVE_GPHOTO2 dt_camctl_destroy((dt_camctl_t *)darktable.camctl); #endif dt_pwstorage_destroy(darktable.pwstorage); #ifdef HAVE_GRAPHICSMAGICK DestroyMagick(); #endif dt_guides_cleanup(darktable.guides); dt_database_destroy(darktable.db); if(init_gui) { dt_bauhaus_cleanup(); } dt_capabilities_cleanup(); dt_pthread_mutex_destroy(&(darktable.db_insert)); dt_pthread_mutex_destroy(&(darktable.plugin_threadsafe)); dt_pthread_mutex_destroy(&(darktable.capabilities_threadsafe)); dt_exif_cleanup(); }
void dt_cleanup() { const int init_gui = (darktable.gui != NULL); #ifdef USE_LUA dt_lua_finalize(); #endif if(init_gui) { dt_ctl_switch_mode_to(DT_MODE_NONE); dt_dbus_destroy(darktable.dbus); dt_control_write_config(darktable.control); dt_control_shutdown(darktable.control); dt_lib_cleanup(darktable.lib); free(darktable.lib); } dt_view_manager_cleanup(darktable.view_manager); free(darktable.view_manager); if(init_gui) { dt_imageio_cleanup(darktable.imageio); free(darktable.imageio); dt_gui_gtk_cleanup(darktable.gui); free(darktable.gui); } dt_image_cache_cleanup(darktable.image_cache); free(darktable.image_cache); dt_mipmap_cache_cleanup(darktable.mipmap_cache); free(darktable.mipmap_cache); if(init_gui) { dt_control_cleanup(darktable.control); free(darktable.control); dt_undo_cleanup(darktable.undo); } dt_conf_cleanup(darktable.conf); free(darktable.conf); dt_points_cleanup(darktable.points); free(darktable.points); dt_iop_unload_modules_so(); dt_opencl_cleanup(darktable.opencl); free(darktable.opencl); #ifdef HAVE_GPHOTO2 dt_camctl_destroy(darktable.camctl); #endif dt_pwstorage_destroy(darktable.pwstorage); dt_fswatch_destroy(darktable.fswatch); #ifdef HAVE_GRAPHICSMAGICK DestroyMagick(); #endif dt_database_destroy(darktable.db); dt_bauhaus_cleanup(); dt_capabilities_cleanup(); dt_pthread_mutex_destroy(&(darktable.db_insert)); dt_pthread_mutex_destroy(&(darktable.plugin_threadsafe)); dt_pthread_mutex_destroy(&(darktable.capabilities_threadsafe)); dt_exif_cleanup(); #ifdef HAVE_GEGL gegl_exit(); #endif }