Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Alexander_Naumov:SLE-12:Update
shared-mime-info
shared-mime-info-disable-fdatasync-in-installat...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File shared-mime-info-disable-fdatasync-in-installation.patch of Package shared-mime-info
From 5c8476b91d5c24ec5a44ec8bb2de42172e4cd405 Mon Sep 17 00:00:00 2001 From: Felix Zhang <fezhang@suse.com> Date: Mon, 14 Dec 2015 16:41:54 +0800 Subject: [PATCH] disable fdatasync in installation --- update-mime-database.c | 60 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/update-mime-database.c b/update-mime-database.c index 86e7365..a8c6c57 100644 --- a/update-mime-database.c +++ b/update-mime-database.c @@ -936,39 +936,71 @@ set_error_from_errno (GError **error) g_strerror(errsv)); } -/* Renames pathname by removing the .new extension */ -static gboolean atomic_update(const gchar *pathname, GError **error) +#ifdef HAVE_FDATASYNC +static gboolean +sync_enabled(void) { - gboolean ret = FALSE; - gchar *new_name = NULL; - int len; - int fd; - - len = strlen(pathname); + const char *env; - g_return_val_if_fail(strcmp(pathname + len - 4, ".new") == 0, FALSE); + env = g_getenv("PKGSYSTEM_ENABLE_FSYNC"); + if (!env) + return TRUE; + return atoi(env); +} - new_name = g_strndup(pathname, len - 4); +static gboolean +install_in_progress(void) +{ + return (g_strcmp0 (g_getenv ("YAST_IS_RUNNING"), "instsys") == 0); +} +#endif +static int +sync_file(const gchar *pathname, GError **error) +{ #ifdef HAVE_FDATASYNC - fd = open(pathname, O_RDONLY); + int fd; + + if (!sync_enabled() || install_in_progress()) + return 0; + + fd = open(pathname, O_RDWR); if (fd == -1) { set_error_from_errno(error); - goto out; + return -1; } if (fdatasync(fd) == -1) { set_error_from_errno(error); - goto out; + return -1; } if (close(fd) == -1) { set_error_from_errno(error); - goto out; + return -1; } #endif + return 0; +} + +/* Renames pathname by removing the .new extension */ +static gboolean atomic_update(const gchar *pathname, GError **error) +{ + gboolean ret = FALSE; + gchar *new_name = NULL; + int len; + + len = strlen(pathname); + + g_return_val_if_fail(strcmp(pathname + len - 4, ".new") == 0, FALSE); + + new_name = g_strndup(pathname, len - 4); + + if (sync_file(pathname, error) == -1) + goto out; + #ifdef _WIN32 /* we need to remove the old file first! */ remove(new_name); -- 2.1.4
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor