![]() |
Ansel 0.0
A darktable fork - bloat + design vision
|
#include "common/atomic.h"#include "common/database.h"#include "common/darktable.h"#include "common/datetime.h"#include "common/debug.h"#include "common/file_location.h"#include "common/iop_order.h"#include "common/styles.h"#include "common/history.h"#include "control/conf.h"#include "control/control.h"#include "gui/legacy_presets.h"#include <gio/gio.h>#include <glib.h>#include <glib/gstdio.h>#include <errno.h>#include <fcntl.h>#include <signal.h>#include <sys/stat.h>#include <sys/types.h>
Include dependency graph for common/database.c:Data Structures | |
| struct | dt_database_t |
Macros | |
| #define | CURRENT_DATABASE_VERSION_LIBRARY 36 |
| #define | CURRENT_DATABASE_VERSION_DATA 9 |
| #define | MAX_NESTED_TRANSACTIONS 0 |
| #define | _SQLITE3_EXEC(a, b, c, d, e) |
| #define | TRY_EXEC(_query, _message) |
| #define | TRY_STEP(_stmt, _expected, _message) |
| #define | TRY_PREPARE(_stmt, _query, _message) |
| #define | FINALIZE |
| #define | FINALIZE |
| #define | FINALIZE |
| #define | FINALIZE |
| #define | TRY_EXEC(_query, _message) |
| #define | TRY_STEP(_stmt, _expected, _message) |
| #define | TRY_PREPARE(_stmt, _query, _message) |
| #define | FINALIZE |
| #define | ERRCHECK {if (err!=NULL) {dt_print(DT_DEBUG_SQL, "[db maintenance] maintenance error: '%s'\n",err); sqlite3_free(err); err=NULL;}} |
Typedefs | |
| typedef struct dt_database_t | dt_database_t |
Functions | |
| static void | _database_migrate_to_xdg_structure () |
| static void | _database_delete_mipmaps_files () |
| static gboolean | _migrate_schema (dt_database_t *db, int version) |
| static int | _upgrade_library_schema_step (dt_database_t *db, int version) |
| static int | _upgrade_data_schema_step (dt_database_t *db, int version) |
| static gboolean | _upgrade_library_schema (dt_database_t *db, int version) |
| static gboolean | _upgrade_data_schema (dt_database_t *db, int version) |
| static void | _create_library_schema (dt_database_t *db) |
| static void | _create_data_schema (dt_database_t *db) |
| static void | _create_memory_schema (dt_database_t *db) |
| static void | _sanitize_db (dt_database_t *db) |
| gboolean | dt_database_show_error (const dt_database_t *db) |
| static gboolean | pid_is_alive (int pid) |
| static gboolean | _lock_single_database (dt_database_t *db, const char *dbfilename, char **lockfile) |
| static gboolean | _lock_databases (dt_database_t *db) |
| void | ask_for_upgrade (const gchar *dbname, const gboolean has_gui) |
| void | dt_database_backup (const char *filename) |
| int | _get_pragma_int_val (sqlite3 *db, const char *pragma) |
| gchar * | _get_pragma_string_val (sqlite3 *db, const char *pragma) |
| dt_database_t * | dt_database_init (const char *alternative, const gboolean load_data, const gboolean has_gui) |
| void | dt_database_destroy (const dt_database_t *db) |
| sqlite3 * | dt_database_get (const dt_database_t *db) |
| const gchar * | dt_database_get_path (const struct dt_database_t *db) |
| gboolean | dt_database_get_lock_acquired (const dt_database_t *db) |
| void | dt_database_cleanup_busy_statements (const struct dt_database_t *db) |
| void | dt_database_perform_maintenance (const struct dt_database_t *db) |
| gboolean | _ask_for_maintenance (const gboolean has_gui, const gboolean closing_time, const guint64 size) |
| static gboolean | _is_mem_db (const struct dt_database_t *db) |
| gboolean | dt_database_maybe_maintenance (const struct dt_database_t *db, const gboolean has_gui, const gboolean closing_time) |
| void | dt_database_optimize (const struct dt_database_t *db) |
| static void | _print_backup_progress (int remaining, int total) |
| static int | _backup_db (sqlite3 *src_db, const char *src_db_name, const char *dest_filename, void(*xProgress)(int, int)) |
| gboolean | dt_database_snapshot (const struct dt_database_t *db) |
| gboolean | dt_database_maybe_snapshot (const struct dt_database_t *db) |
| static gboolean | _get_iso8601_int (const gchar *text, gsize length, gint *value) |
| static gint | _db_snap_sort (gconstpointer a, gconstpointer b, gpointer user_data) |
| char ** | dt_database_snaps_to_remove (const struct dt_database_t *db) |
| gchar * | dt_database_get_most_recent_snap (const char *db_filename) |
| void | dt_database_start_transaction_debug (const struct dt_database_t *db) |
| void | dt_database_release_transaction_debug (const struct dt_database_t *db) |
| void | dt_database_rollback_transaction (const struct dt_database_t *db) |
| void | dt_database_begin_transaction_batch (const struct dt_database_t *db) |
| void | dt_database_end_transaction_batch (const struct dt_database_t *db) |
Variables | |
| static dt_atomic_int | _trxid |
| static dt_atomic_int | _trx_batch_level |
| static gpointer | _trx_owner = NULL |
| static gpointer | _trx_batch_owner = NULL |
| #define CURRENT_DATABASE_VERSION_DATA 9 |
| #define CURRENT_DATABASE_VERSION_LIBRARY 36 |
| #define ERRCHECK {if (err!=NULL) {dt_print(DT_DEBUG_SQL, "[db maintenance] maintenance error: '%s'\n",err); sqlite3_free(err); err=NULL;}} |
| #define FINALIZE |
| #define FINALIZE |
| #define FINALIZE |
| #define FINALIZE |
| #define FINALIZE |
| #define MAX_NESTED_TRANSACTIONS 0 |
| #define TRY_EXEC | ( | _query, | |
| _message | |||
| ) |
| #define TRY_EXEC | ( | _query, | |
| _message | |||
| ) |
| #define TRY_PREPARE | ( | _stmt, | |
| _query, | |||
| _message | |||
| ) |
| #define TRY_PREPARE | ( | _stmt, | |
| _query, | |||
| _message | |||
| ) |
| #define TRY_STEP | ( | _stmt, | |
| _expected, | |||
| _message | |||
| ) |
| #define TRY_STEP | ( | _stmt, | |
| _expected, | |||
| _message | |||
| ) |
| typedef struct dt_database_t dt_database_t |
| gboolean _ask_for_maintenance | ( | const gboolean | has_gui, |
| const gboolean | closing_time, | ||
| const guint64 | size | ||
| ) |
References dt_conf_get_string_const(), dt_free, dt_gui_show_standalone_yes_no_dialog(), FALSE, and size.
Referenced by dt_database_maybe_maintenance().
|
static |
References _get_pragma_int_val(), DT_DEBUG_SQL, dt_free, dt_print(), MAX, MIN, and void().
Referenced by dt_database_snapshot().
|
static |
References CURRENT_DATABASE_VERSION_DATA, and dt_database_t::handle.
Referenced by dt_database_init().
|
static |
References CURRENT_DATABASE_VERSION_LIBRARY, and dt_database_t::handle.
Referenced by dt_database_init().
|
static |
References dt_database_t::handle.
Referenced by dt_database_init().
|
static |
References dt_loc_get_user_cache_dir(), and PATH_MAX.
Referenced by dt_database_init().
|
static |
References dt_conf_get_string(), dt_conf_set_string(), dt_free, dt_loc_get_datadir(), and PATH_MAX.
Referenced by dt_database_init().
|
static |
References _get_iso8601_int(), a, b, and day.
Referenced by dt_database_snaps_to_remove().
|
static |
| int _get_pragma_int_val | ( | sqlite3 * | db, |
| const char * | pragma | ||
| ) |
References dt_free.
Referenced by _backup_db(), dt_database_maybe_maintenance(), and dt_database_perform_maintenance().
| gchar * _get_pragma_string_val | ( | sqlite3 * | db, |
| const char * | pragma | ||
| ) |
References dt_free.
Referenced by dt_database_init().
|
inlinestatic |
|
static |
References _lock_single_database(), dt_database_t::dbfilename_data, dt_database_t::dbfilename_library, FALSE, dt_database_t::lockfile_data, dt_database_t::lockfile_library, and TRUE.
Referenced by dt_database_init().
|
static |
References dt_free, dt_database_t::error_dbfilename, dt_database_t::error_message, dt_database_t::error_other_pid, FALSE, pid_is_alive(), and TRUE.
Referenced by _lock_databases().
|
static |
References _SQLITE3_EXEC, dt_free, FALSE, dt_database_t::handle, i, name, and TRUE.
Referenced by dt_database_init().
|
static |
References DT_DEBUG_SQL, and dt_print().
Referenced by dt_database_snapshot().
|
static |
References dt_free, dt_util_foo_to_utf8(), and dt_database_t::handle.
Referenced by dt_database_init().
|
static |
References _upgrade_data_schema_step(), CURRENT_DATABASE_VERSION_DATA, FALSE, and TRUE.
Referenced by dt_database_init().
|
static |
References CURRENT_DATABASE_VERSION_DATA, dt_free_gpointer(), DT_IOP_ORDER_LEGACY, dt_ioppr_get_iop_order_list_version(), dt_database_t::handle, dt_iop_order_entry_t::iop_order_f, dt_iop_order_entry_t::o, dt_iop_order_entry_t::operation, TRY_EXEC, TRY_PREPARE, and TRY_STEP.
Referenced by _upgrade_data_schema().
|
static |
References _upgrade_library_schema_step(), CURRENT_DATABASE_VERSION_LIBRARY, FALSE, and TRUE.
Referenced by dt_database_init().
|
static |
References CURRENT_DATABASE_VERSION_LIBRARY, darktable, dt_datetime_exif_to_gdatetime(), dt_datetime_gdatetime_to_gtimespan(), dt_free, dt_free_gpointer(), DT_IMAGE_HDR, DT_IMAGE_LDR, DT_IMAGE_RAW, dt_imageio_get_type_from_extension(), DT_IOP_ORDER_CUSTOM, DT_IOP_ORDER_LEGACY, DT_IOP_ORDER_V30, dt_ioppr_get_iop_order_list_kind(), dt_ioppr_get_iop_order_list_version(), dt_ioppr_serialize_text_iop_order_list(), dt_sort_iop_list_by_order_f(), FALSE, FINALIZE, flags, dt_database_t::handle, i, dt_iop_order_entry_t::instance, dt_iop_order_entry_t::iop_order_f, kind, n, name, dt_iop_order_entry_t::o, dt_iop_order_entry_t::operation, TRUE, TRY_EXEC, TRY_PREPARE, TRY_STEP, UNKNOWN_IMAGE, and darktable_t::utc_tz.
Referenced by _upgrade_library_schema().
| void ask_for_upgrade | ( | const gchar * | dbname, |
| const gboolean | has_gui | ||
| ) |
References dt_free, and dt_gui_show_standalone_yes_no_dialog().
Referenced by dt_database_init().
| void dt_database_backup | ( | const char * | filename | ) |
References darktable_package_version, dt_free, FALSE, and TRUE.
Referenced by dt_database_init().
| void dt_database_begin_transaction_batch | ( | const struct dt_database_t * | db | ) |
References _trx_batch_level, _trx_batch_owner, _trx_owner, darktable, darktable_t::database_threadsafe, dt_atomic_add_int(), dt_database_get(), DT_DEBUG_SQLITE3_EXEC, and dt_pthread_rwlock_wrlock.
Referenced by dt_iop_load_modules_so().
| void dt_database_cleanup_busy_statements | ( | const struct dt_database_t * | db | ) |
cleanup busy statements on closing dt, just before performing maintenance
References DT_DEBUG_SQL, dt_print(), and dt_database_t::handle.
Referenced by dt_cleanup().
| void dt_database_destroy | ( | const dt_database_t * | db | ) |
References dt_database_t::dbfilename_data, dt_database_t::dbfilename_library, dt_free, dt_database_t::handle, dt_database_t::lockfile_data, and dt_database_t::lockfile_library.
Referenced by dt_cleanup(), and dt_database_init().
| void dt_database_end_transaction_batch | ( | const struct dt_database_t * | db | ) |
| sqlite3 * dt_database_get | ( | const dt_database_t * | db | ) |
References dt_database_t::handle.
Referenced by _active_modules_popup(), _bulk_add_metadata(), _bulk_add_tags(), _bulk_remove_metadata(), _bulk_remove_tags(), _clean_missing_ids(), _clear_undo_snapshot(), _concatenate_multiple_images(), _create_filtered_model(), _db_update_timestamp(), _dt_collection_compute_count(), _dt_style_cleanup_multi_instance(), _dt_style_update_from_image(), _dt_style_update_iop_order(), _dt_styles_get_apply_items(), _edit_preset_response(), _exif_import_tags(), _exif_xmp_read_data(), _exif_xmp_read_data_export(), _film_strip_activated(), _get_active_preset_name(), _get_base_value(), _get_full_pathname(), _gui_presets_popup_menu_show_internal(), _history_snapshot_undo_restore(), _image_cache_get_stmt(), _image_cache_reload_from_db(), _image_cache_write_history_hash(), _image_duplicate_with_version_ext(), _image_import_internal(), _image_update_group_tooltip(), _init_presets(), _jump_to(), _lib_duplicate_init_callback(), _map_location_find_images(), _menuitem_update_preset(), _nb_other_local_copy_for(), _pop_menu_dictionary_delete_tag(), _presets_show_edit_dialog(), _selection_database_to_glist(), _selection_deselect(), _selection_select(), _set_remove_flag(), _setup_selected_images_list(), _single_selected_imgid(), _tag_get_attached_export(), _tag_get_tags(), _update(), _view_map_center_on_image_list(), _write_timestamp_get(), _write_timestamp_set_now(), add_mask_entry_to_db(), database_get_image(), database_len(), database_numindex(), dt_collection_get(), dt_collection_get_makermodels(), dt_collection_get_nth(), dt_collection_image_offset_with_collection(), dt_collection_memory_update(), dt_collection_update_query(), dt_colorlabels_check_label(), dt_colorlabels_get_labels(), dt_colorlabels_remove_label(), dt_colorlabels_remove_labels(), dt_colorlabels_set_label(), dt_colorspaces_get_work_profile(), dt_control_crawler_run(), dt_control_delete_images_job_run(), dt_control_image_enumerator_job_film_init(), dt_control_remove_images_job_run(), dt_database_begin_transaction_batch(), dt_database_end_transaction_batch(), dt_database_release_transaction_debug(), dt_database_rollback_transaction(), dt_database_start_transaction_debug(), dt_exif_xmp_read(), dt_film_get_id(), dt_film_get_image_ids(), dt_film_is_empty(), dt_film_new(), dt_film_open(), dt_film_remove(), dt_film_remove_empty(), dt_film_set_folder_status(), dt_film_set_query(), dt_grouping_add_grouped_images(), dt_grouping_change_representative(), dt_grouping_get_group_images(), dt_grouping_remove_from_group(), dt_gui_presets_add_with_blendop(), dt_gui_presets_apply_preset(), dt_gui_presets_autoapply_for_module(), dt_gui_presets_confirm_and_delete(), dt_gui_presets_init(), dt_gui_presets_show_edit_dialog(), dt_gui_presets_update_autoapply(), dt_gui_presets_update_av(), dt_gui_presets_update_filter(), dt_gui_presets_update_fl(), dt_gui_presets_update_iso(), dt_gui_presets_update_ldr(), dt_gui_presets_update_mml(), dt_gui_presets_update_tv(), dt_history_check_module_exists(), dt_history_db_delete_history(), dt_history_db_delete_masks_history(), dt_history_db_foreach_auto_preset_row(), dt_history_db_foreach_history_row(), dt_history_db_get_autoapply_ioporder_params(), dt_history_db_get_next_history_num(), dt_history_db_shift_history_nums(), dt_history_db_write_history_item(), dt_history_delete_on_image_ext(), dt_history_get_end(), dt_history_get_items(), dt_history_get_items_as_string(), dt_history_set_end(), dt_history_snapshot_undo_create(), dt_image_altered(), dt_image_cache_write_release(), dt_image_copy_rename(), dt_image_film_roll(), dt_image_film_roll_directory(), dt_image_get_id(), dt_image_get_id_full_path(), dt_image_get_orientation(), dt_image_local_copy_synch(), dt_image_path_append_version(), dt_image_read_duplicates(), dt_image_remove(), dt_image_rename(), dt_iop_set_darktable_iop_table(), dt_ioppr_get_iop_order_list(), dt_ioppr_get_iop_order_version(), dt_ioppr_has_iop_order_list(), dt_ioppr_write_iop_order(), dt_is_tag_attached(), dt_legacy_presets_create(), dt_lib_init_presets(), dt_lib_presets_add(), dt_lib_presets_apply(), dt_lib_presets_duplicate(), dt_lib_presets_popup_menu_show(), dt_lib_presets_remove(), dt_lib_presets_update(), dt_lua_image_push(), dt_lua_tag_get_attached(), dt_lua_tag_get_tagged_images(), dt_map_location_delete(), dt_map_location_find_locations(), dt_map_location_get_data(), dt_map_location_get_images_count(), dt_map_location_get_locations_by_path(), dt_map_location_get_locations_on_map(), dt_map_location_get_polygons(), dt_map_location_set_data(), dt_map_location_update_locations(), dt_masks_read_masks_history(), dt_masks_write_masks_history_item(), dt_metadata_already_imported(), dt_metadata_get(), dt_metadata_get_list_id(), dt_pop_collection(), dt_presets_import_from_file(), dt_presets_save_to_file(), dt_push_collection(), dt_selection_clear(), dt_selection_deselect_list(), dt_selection_pop(), dt_selection_push(), dt_selection_select_list(), dt_selection_to_culling_mode(), dt_set_darktable_tags(), dt_set_xmp_dt_history(), dt_set_xmp_dt_metadata(), dt_style_plugin_save(), dt_styles_create_from_image(), dt_styles_create_from_style(), dt_styles_create_style_header(), dt_styles_delete_by_name_adv(), dt_styles_get_by_name(), dt_styles_get_description(), dt_styles_get_id_by_name(), dt_styles_get_item_list(), dt_styles_get_list(), dt_styles_has_module_order(), dt_styles_module_order_list(), dt_styles_save_to_file(), dt_styles_update(), dt_tag_add_synonym(), dt_tag_count_tags_images(), dt_tag_delete_tag_batch(), dt_tag_exists(), dt_tag_get_attached(), dt_tag_get_flags(), dt_tag_get_images(), dt_tag_get_images_from_list(), dt_tag_get_name(), dt_tag_get_subtags(), dt_tag_get_suggestions(), dt_tag_get_synonyms(), dt_tag_get_tag_id_by_name(), dt_tag_get_tag_order_by_id(), dt_tag_get_tags_images(), dt_tag_get_with_usage(), dt_tag_images_count(), dt_tag_new(), dt_tag_remove(), dt_tag_rename(), dt_tag_set_flags(), dt_tag_set_synonyms(), dt_tag_set_tag_order_by_id(), dt_thumbtable_info_get_collection_stmt(), edit_preset(), enter(), export_preset(), film_getnum(), film_len(), film_tostring(), films_index(), films_len(), generate_thumbnail_cache(), get_active_preset_name(), get_group(), group_images_callback(), init_presets(), list_view(), menuitem_new_preset(), menuitem_update_preset(), path_member(), process_image(), reload_defaults(), set_xmp_timestamps(), style_table_index(), style_table_len(), tag_delete(), tag_index(), tag_length(), tag_lib_index(), tag_lib_length(), tree_insert_presets(), tree_key_press_presets(), tree_view(), ungroup_images_callback(), update(), view_popup_menu_onRemove(), and view_popup_menu_onSearchFilmroll().
| gboolean dt_database_get_lock_acquired | ( | const dt_database_t * | db | ) |
References dt_database_t::lock_acquired.
Referenced by dt_init().
| gchar * dt_database_get_most_recent_snap | ( | const char * | db_filename | ) |
get possibly the freshest snapshot to restore
References DT_DEBUG_SQL, dt_free, dt_print(), and error().
Referenced by dt_database_init().
| const gchar * dt_database_get_path | ( | const struct dt_database_t * | db | ) |
Returns database path
References dt_database_t::dbfilename_library.
Referenced by dt_mipmap_cache_get_filename().
| dt_database_t * dt_database_init | ( | const char * | alternative, |
| const gboolean | load_data, | ||
| const gboolean | has_gui | ||
| ) |
allocates and initializes database
References _create_data_schema(), _create_library_schema(), _create_memory_schema(), _database_delete_mipmaps_files(), _database_migrate_to_xdg_structure(), _get_pragma_string_val(), _lock_databases(), _migrate_schema(), _sanitize_db(), _trx_batch_level, _trx_batch_owner, _trxid, _upgrade_data_schema(), _upgrade_library_schema(), ask_for_upgrade(), CURRENT_DATABASE_VERSION_DATA, CURRENT_DATABASE_VERSION_LIBRARY, dt_database_t::dbfilename_data, dt_database_t::dbfilename_library, dt_atomic_set_int(), dt_conf_get_string(), dt_database_backup(), dt_database_destroy(), dt_database_get_most_recent_snap(), DT_DEBUG_SQL, dt_free, dt_legacy_presets_create(), dt_loc_get_datadir(), dt_loc_get_user_config_dir(), dt_print(), error(), FALSE, dt_database_t::handle, dt_database_t::lock_acquired, dt_database_t::lockfile_data, dt_database_t::lockfile_library, PATH_MAX, sqlite3IcuInit(), and TRUE.
Referenced by dt_init().
| gboolean dt_database_maybe_maintenance | ( | const struct dt_database_t * | db, |
| const gboolean | has_gui, | ||
| const gboolean | closing_time | ||
| ) |
conditionally perfrom db maintenance
References _ask_for_maintenance(), _get_pragma_int_val(), _is_mem_db(), dt_conf_get_int(), dt_conf_get_string_const(), DT_DEBUG_SQL, dt_print(), FALSE, dt_database_t::handle, and TRUE.
Referenced by dt_cleanup(), and dt_init().
| gboolean dt_database_maybe_snapshot | ( | const struct dt_database_t * | db | ) |
check if creating database snapshot is recommended
References _is_mem_db(), dt_database_t::dbfilename_library, dt_conf_get_string_const(), DT_DEBUG_SQL, dt_free, dt_print(), error(), FALSE, and TRUE.
Referenced by dt_cleanup().
| void dt_database_optimize | ( | const struct dt_database_t * | db | ) |
perform pre-db-close optimizations (always call when quiting darktable)
References _is_mem_db(), DT_DEBUG_SQLITE3_EXEC, and dt_database_t::handle.
Referenced by dt_cleanup().
| void dt_database_perform_maintenance | ( | const struct dt_database_t * | db | ) |
References _get_pragma_int_val(), DT_DEBUG_SQL, DT_DEBUG_SQLITE3_EXEC, dt_print(), ERRCHECK, and dt_database_t::handle.
Referenced by dt_cleanup(), dt_init(), and optimize_database_callback().
| void dt_database_release_transaction_debug | ( | const struct dt_database_t * | db | ) |
| void dt_database_rollback_transaction | ( | const struct dt_database_t * | db | ) |
References _trx_batch_level, _trx_batch_owner, _trx_owner, _trxid, darktable, darktable_t::database_threadsafe, dt_atomic_set_int(), dt_atomic_sub_int(), dt_database_get(), DT_DEBUG_SQLITE3_EXEC, and dt_pthread_rwlock_unlock.
Referenced by _history_snapshot_undo_restore(), dt_exif_xmp_read(), and dt_history_snapshot_undo_create().
| gboolean dt_database_show_error | ( | const dt_database_t * | db | ) |
References dt_free, dt_gui_show_standalone_yes_no_dialog(), error(), dt_database_t::error_dbfilename, dt_database_t::error_message, dt_database_t::error_other_pid, FALSE, dt_database_t::lock_acquired, and TRUE.
Referenced by dt_init().
| char ** dt_database_snaps_to_remove | ( | const struct dt_database_t * | db | ) |
get list of snapshot files to remove after successful snapshot
References _db_snap_sort(), _is_mem_db(), dt_database_t::dbfilename_data, dt_database_t::dbfilename_library, dt_conf_get_int(), DT_DEBUG_SQL, dt_free, dt_print(), error(), and FALSE.
Referenced by dt_cleanup().
| gboolean dt_database_snapshot | ( | const struct dt_database_t * | db | ) |
simply create db snapshot of both library and data
References _backup_db(), _is_mem_db(), _print_backup_progress(), dt_database_t::dbfilename_data, dt_database_t::dbfilename_library, dt_free, FALSE, dt_database_t::handle, and TRUE.
Referenced by backup_database_callback(), and dt_cleanup().
| void dt_database_start_transaction_debug | ( | const struct dt_database_t * | db | ) |
|
static |
References dt_free, FALSE, h, pid_is_alive(), and TRUE.
Referenced by _lock_single_database(), and pid_is_alive().
|
static |
|
static |
|
static |
|
static |