rpms/PackageKit/F-11 PackageKit-0.4.6-yum-dont-allow-SIGKILL.patch, NONE, 1.1 PackageKit.spec, 1.104, 1.105
Richard Hughes
rhughes at fedoraproject.org
Thu Apr 23 11:29:37 UTC 2009
- Previous message (by thread): rpms/python-simpy/devel .cvsignore,1.8,1.9 sources,1.9,1.10
- Next message (by thread): rpms/python-simpy/F-11 .cvsignore, 1.8, 1.9 python-simpy.spec, 1.23, 1.24 sources, 1.9, 1.10
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: rhughes
Update of /cvs/pkgs/rpms/PackageKit/F-11
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv9501
Modified Files:
PackageKit.spec
Added Files:
PackageKit-0.4.6-yum-dont-allow-SIGKILL.patch
Log Message:
* Thu Apr 23 2009 Richard Hughes <rhughes at redhat.com> - 0.4.6-7
- Backport a patch from upstream to disallow SIGKILL when using the yum
backend. This is recommended by Panu.
PackageKit-0.4.6-yum-dont-allow-SIGKILL.patch:
--- NEW FILE PackageKit-0.4.6-yum-dont-allow-SIGKILL.patch ---
diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index 05f573c..87228b1 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -63,6 +63,7 @@ backend_initialize (PkBackend *backend)
pk_backend_spawn_set_filter_stderr (spawn, backend_stderr_cb);
pk_backend_spawn_set_filter_stdout (spawn, backend_stdout_cb);
pk_backend_spawn_set_name (spawn, "yum");
+ pk_backend_spawn_set_allow_sigkill (spawn, FALSE);
}
/**
diff --git a/etc/PackageKit.conf.in b/etc/PackageKit.conf.in
index 36b7e8f..5ab4cd6 100644
--- a/etc/PackageKit.conf.in
+++ b/etc/PackageKit.conf.in
@@ -53,6 +53,21 @@ BackendSpawnNiceValue=10
# default=true
BackendSpawnIdleIO=true
+# Set whether the spawned backends are allowed to be SIGKILLed if they do not
+# respond to SIGQUIT. This ensures that Cancel() works as expected, but
+# somtimes can corrupt databases if they are open.
+#
+# Only change this to FALSE if your backend can not be SIGKILLed without
+# database corruption.
+#
+# Even if this is set TRUE, the backend can still enforce this FALSE if it it
+# explicitly set in the compiled backend. You can think of this as a fallback
+# value that is used when backends do not enforce policy, or as a way to disable
+# SIGKILL even for backends that calim to support it.
+#
+# default=true
+BackendSpawnAllowSIGKILL=true
+
# Default backend, as chosen in the configure script. This will be used where
# no --backend="foo" option is given to the daemon.
#
diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c
index 417f142..2942584 100644
--- a/src/pk-backend-spawn.c
+++ b/src/pk-backend-spawn.c
@@ -63,6 +63,7 @@ struct PkBackendSpawnPrivate
guint backend_finished_id;
PkConf *conf;
gboolean finished;
+ gboolean allow_sigkill;
PkBackendSpawnFilterFunc stdout_func;
PkBackendSpawnFilterFunc stderr_func;
};
@@ -763,6 +764,27 @@ pk_backend_spawn_helper (PkBackendSpawn *backend_spawn, const gchar *first_eleme
}
/**
+ * pk_backend_spawn_set_allow_sigkill:
+ **/
+gboolean
+pk_backend_spawn_set_allow_sigkill (PkBackendSpawn *backend_spawn, gboolean allow_sigkill)
+{
+ gboolean ret = FALSE;
+
+ g_return_val_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn), FALSE);
+
+ /* have we banned this in the config ile */
+ if (!backend_spawn->priv->allow_sigkill && allow_sigkill) {
+ egg_warning ("cannot set allow_cancel TRUE as BackendSpawnAllowSIGKILL is set to FALSE in PackageKit.conf");
+ goto out;
+ }
+
+ ret = pk_spawn_set_allow_sigkill (backend_spawn->priv->spawn, allow_sigkill);
+out:
+ return ret;
+}
+
+/**
* pk_backend_spawn_finalize:
**/
static void
@@ -821,6 +843,10 @@ pk_backend_spawn_init (PkBackendSpawn *backend_spawn)
G_CALLBACK (pk_backend_spawn_stdout_cb), backend_spawn);
g_signal_connect (backend_spawn->priv->spawn, "stderr",
G_CALLBACK (pk_backend_spawn_stderr_cb), backend_spawn);
+
+ /* set if SIGKILL is allowed */
+ backend_spawn->priv->allow_sigkill = pk_conf_get_bool (backend_spawn->priv->conf, "BackendSpawnAllowSIGKILL");
+ pk_spawn_set_allow_sigkill (backend_spawn->priv->spawn, backend_spawn->priv->allow_sigkill);
}
/**
diff --git a/src/pk-backend-spawn.h b/src/pk-backend-spawn.h
index 894c4a6..b55e7ad 100644
--- a/src/pk-backend-spawn.h
+++ b/src/pk-backend-spawn.h
@@ -58,6 +58,8 @@ gboolean pk_backend_spawn_kill (PkBackendSpawn *backend_spawn);
const gchar *pk_backend_spawn_get_name (PkBackendSpawn *backend_spawn);
gboolean pk_backend_spawn_set_name (PkBackendSpawn *backend_spawn,
const gchar *name);
+gboolean pk_backend_spawn_set_allow_sigkill (PkBackendSpawn *backend_spawn,
+ gboolean allow_sigkill);
/* filtering */
typedef gboolean (*PkBackendSpawnFilterFunc) (PkBackend *backend,
diff --git a/src/pk-spawn.c b/src/pk-spawn.c
index bd609e4..5c356a1 100644
--- a/src/pk-spawn.c
+++ b/src/pk-spawn.c
@@ -69,6 +69,7 @@ struct PkSpawnPrivate
gboolean finished;
gboolean is_sending_exit;
gboolean is_changing_dispatcher;
+ gboolean allow_sigkill;
PkSpawnExitType exit;
GString *stdout_buf;
GString *stderr_buf;
@@ -293,8 +294,7 @@ pk_spawn_is_running (PkSpawn *spawn)
/**
* pk_spawn_kill:
*
- * We send SIGQUIT and after a few ms SIGKILL
- *
+ * We send SIGQUIT and after a few ms SIGKILL (if allowed)
**/
gboolean
pk_spawn_kill (PkSpawn *spawn)
@@ -324,7 +324,26 @@ pk_spawn_kill (PkSpawn *spawn)
}
/* the program might not be able to handle SIGQUIT, give it a few seconds and then SIGKILL it */
- spawn->priv->kill_id = g_timeout_add (PK_SPAWN_SIGKILL_DELAY, (GSourceFunc) pk_spawn_sigkill_cb, spawn);
+ if (spawn->priv->allow_sigkill)
+ spawn->priv->kill_id = g_timeout_add (PK_SPAWN_SIGKILL_DELAY, (GSourceFunc) pk_spawn_sigkill_cb, spawn);
+
+ return TRUE;
+}
+
+/**
+ * pk_spawn_set_allow_sigkill:
+ *
+ * Set whether the spawned backends are allowed to be SIGKILLed if they do not
+ * respond to SIGQUIT. This ensures that Cancel() works as expected, but
+ * somtimes can corrupt databases if they are open.
+ **/
+gboolean
+pk_spawn_set_allow_sigkill (PkSpawn *spawn, gboolean allow_sigkill)
+{
+ g_return_val_if_fail (PK_IS_SPAWN (spawn), FALSE);
+
+ egg_debug ("setting SIGKILL: %i", allow_sigkill);
+ spawn->priv->allow_sigkill = allow_sigkill;
return TRUE;
}
@@ -592,6 +611,7 @@ pk_spawn_init (PkSpawn *spawn)
spawn->priv->finished = FALSE;
spawn->priv->is_sending_exit = FALSE;
spawn->priv->is_changing_dispatcher = FALSE;
+ spawn->priv->allow_sigkill = TRUE;
spawn->priv->last_argv0 = NULL;
spawn->priv->last_envp = NULL;
spawn->priv->exit = PK_SPAWN_EXIT_TYPE_UNKNOWN;
diff --git a/src/pk-spawn.h b/src/pk-spawn.h
index 6d81bab..8901fb0 100644
--- a/src/pk-spawn.h
+++ b/src/pk-spawn.h
@@ -73,6 +73,8 @@ gboolean pk_spawn_argv (PkSpawn *spawn,
gboolean pk_spawn_is_running (PkSpawn *spawn);
gboolean pk_spawn_kill (PkSpawn *spawn);
gboolean pk_spawn_exit (PkSpawn *spawn);
+gboolean pk_spawn_set_allow_sigkill (PkSpawn *spawn,
+ gboolean allow_sigkill);
G_END_DECLS
Index: PackageKit.spec
===================================================================
RCS file: /cvs/pkgs/rpms/PackageKit/F-11/PackageKit.spec,v
retrieving revision 1.104
retrieving revision 1.105
diff -u -r1.104 -r1.105
--- PackageKit.spec 22 Apr 2009 11:09:34 -0000 1.104
+++ PackageKit.spec 23 Apr 2009 11:29:06 -0000 1.105
@@ -10,7 +10,7 @@
Name: PackageKit
Version: 0.4.6
#Release: 0.3.%{?alphatag}git%{?dist}
-Release: 6%{?dist}
+Release: 7%{?dist}
License: GPLv2+
Group: System Environment/Libraries
URL: http://www.packagekit.org
@@ -51,6 +51,9 @@
# Already upstream: 6ed10da156d9130f5443c1348405434cdc0cdfce
Patch10: PackageKit-0.4.6-send-package-finished.patch
+# Already upstream: 33894239b42dcb6069ab3a99e3cb47667448d499..a782056c337562594155a9405adcd9d5e65be32d
+Patch11: PackageKit-0.4.6-yum-dont-allow-SIGKILL.patch
+
Requires: dbus >= %{dbus_version}
Requires: dbus-glib >= %{dbus_glib_version}
Requires: PackageKit-glib = %{version}-%{release}
@@ -260,6 +263,7 @@
%patch8 -p1 -b .presto-filter
%patch9 -p1 -b .presto-downloading-updates
%patch10 -p1 -b .send-package-finished
+%patch11 -p1 -b .disallow-sigkill
%build
%configure --enable-yum --enable-smart --with-default-backend=yum --disable-local --disable-ruck
@@ -454,6 +458,10 @@
%{_includedir}/PackageKit/backend/*.h
%changelog
+* Thu Apr 23 2009 Richard Hughes <rhughes at redhat.com> - 0.4.6-7
+- Backport a patch from upstream to disallow SIGKILL when using the yum
+ backend. This is recommended by Panu.
+
* Wed Apr 22 2009 Richard Hughes <rhughes at redhat.com> - 0.4.6-6
- Send ::Package(finished) when we've finished downloading a file rather than
relying for the daemon to clean up for us.
- Previous message (by thread): rpms/python-simpy/devel .cvsignore,1.8,1.9 sources,1.9,1.10
- Next message (by thread): rpms/python-simpy/F-11 .cvsignore, 1.8, 1.9 python-simpy.spec, 1.23, 1.24 sources, 1.9, 1.10
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list