void enkf_fs_close( enkf_fs_type * fs ) { enkf_fs_fsync( fs ); enkf_fs_fwrite_misfit( fs ); enkf_fs_free_driver( fs->dynamic_forecast ); enkf_fs_free_driver( fs->dynamic_analyzed ); enkf_fs_free_driver( fs->parameter ); enkf_fs_free_driver( fs->eclipse_static ); enkf_fs_free_driver( fs->index ); util_safe_free( fs->case_name ); util_safe_free( fs->root_path ); util_safe_free( fs->mount_point ); path_fmt_free( fs->case_fmt ); path_fmt_free( fs->case_member_fmt ); path_fmt_free( fs->case_tstep_fmt ); path_fmt_free( fs->case_tstep_member_fmt ); time_map_free( fs->time_map ); free( fs ); }
static void enkf_fs_umount( enkf_fs_type * fs ) { if (!fs->read_only) { enkf_fs_fsync( fs ); enkf_fs_fwrite_misfit( fs ); } if (fs->lock_fd > 0) { close( fs->lock_fd ); // Closing the lock_file file descriptor - and releasing the lock. util_unlink_existing( fs->lock_file ); } { int refcount = fs->refcount; if (refcount == 0) { enkf_fs_free_driver( fs->dynamic_forecast ); enkf_fs_free_driver( fs->dynamic_analyzed ); enkf_fs_free_driver( fs->parameter ); enkf_fs_free_driver( fs->eclipse_static ); enkf_fs_free_driver( fs->index ); util_safe_free( fs->case_name ); util_safe_free( fs->root_path ); util_safe_free(fs->lock_file); util_safe_free( fs->mount_point ); path_fmt_free( fs->case_fmt ); path_fmt_free( fs->case_member_fmt ); path_fmt_free( fs->case_tstep_fmt ); path_fmt_free( fs->case_tstep_member_fmt ); state_map_free( fs->state_map ); time_map_free( fs->time_map ); cases_config_free( fs->cases_config ); free( fs ); } else util_abort("%s: internal fuckup - tried to umount a filesystem with refcount:%d\n",__func__ , refcount); } }