summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGilles Dartiguelongue <eva@gentoo.org>2010-05-05 22:50:31 +0000
committerGilles Dartiguelongue <eva@gentoo.org>2010-05-05 22:50:31 +0000
commitb4de23cd34710e7283fc40936437616dc5c16061 (patch)
tree6cb90f54688f70be95c084c94043aae8ff742f0a /media-sound/rhythmbox/files
parentFix udev rules, bug #316027. Fix build problem with -O0, bug #306803. (diff)
downloadgentoo-2-b4de23cd34710e7283fc40936437616dc5c16061.tar.gz
gentoo-2-b4de23cd34710e7283fc40936437616dc5c16061.tar.bz2
gentoo-2-b4de23cd34710e7283fc40936437616dc5c16061.zip
Fix segfault with recent python, bug #318333. Clean up old revisions.
(Portage version: 2.2_rc67/cvs/Linux x86_64)
Diffstat (limited to 'media-sound/rhythmbox/files')
-rw-r--r--media-sound/rhythmbox/files/rhythmbox-0.12-python-initialization.patch171
-rw-r--r--media-sound/rhythmbox/files/rhythmbox-0.12.5-fix-daap-plugin-linking.patch22
2 files changed, 171 insertions, 22 deletions
diff --git a/media-sound/rhythmbox/files/rhythmbox-0.12-python-initialization.patch b/media-sound/rhythmbox/files/rhythmbox-0.12-python-initialization.patch
new file mode 100644
index 000000000000..deb34c0469a4
--- /dev/null
+++ b/media-sound/rhythmbox/files/rhythmbox-0.12-python-initialization.patch
@@ -0,0 +1,171 @@
+From 4394826f36fad0ad36ea773b6d4525dfcfcd389b Mon Sep 17 00:00:00 2001
+From: Jonathan Matthew <jonathan@d14n.org>
+Date: Wed, 05 May 2010 12:58:26 +0000
+Subject: python: fix a number of python initialization problems (bug #617587)
+
+- pygtk.require("2.8") doesn't work - it's only after a major version,
+ so we should pass in "2.0" instead
+- init_pygobject() is deprecated, use pygobject_init (and pass in the
+ version we require) instead
+- init_pygtk() is a macro that returns from the current function on
+ error, so we need to call it from a separate function for our error
+ handling to work
+- if some aspect of python initialization failed, we were still using
+ the pygobject GIL macros, which were crashing
+---
+diff --git a/shell/main.c b/shell/main.c
+index 1f27fee..a4dd50a 100644
+--- a/shell/main.c
++++ b/shell/main.c
+@@ -35,6 +35,7 @@
+ #define NO_IMPORT_PYGOBJECT
+ #define NO_IMPORT_PYGTK
+ #include <pygobject.h>
++#include "rb-python-module.h"
+
+ /* make sure it's defined somehow */
+ #ifndef _XOPEN_SOURCE
+@@ -327,11 +328,15 @@ main (int argc, char **argv)
+
+ rb_profile_start ("mainloop");
+ #ifdef ENABLE_PYTHON
+- pyg_begin_allow_threads;
+-#endif
++ if (rb_python_init_successful ()) {
++ pyg_begin_allow_threads;
++ gtk_main ();
++ pyg_end_allow_threads;
++ } else {
++ gtk_main ();
++ }
++#else
+ gtk_main ();
+-#ifdef ENABLE_PYTHON
+- pyg_end_allow_threads;
+ #endif
+ rb_profile_end ("mainloop");
+
+diff --git a/shell/rb-python-module.c b/shell/rb-python-module.c
+index 9e14731..1995a42 100644
+--- a/shell/rb-python-module.c
++++ b/shell/rb-python-module.c
+@@ -84,8 +84,16 @@ extern PyMethodDef pyrb_functions[];
+ /* We retreive this to check for correct class hierarchy */
+ static PyTypeObject *PyRBPlugin_Type;
+
++static gboolean python_init_successful;
++
+ G_DEFINE_TYPE (RBPythonModule, rb_python_module, G_TYPE_TYPE_MODULE);
+
++static void
++actually_init_pygtk (void)
++{
++ init_pygtk ();
++}
++
+ void
+ rb_python_module_init_python (void)
+ {
+@@ -98,6 +106,7 @@ rb_python_module_init_python (void)
+ char *argv[] = { "rb", "rhythmdb", NULL };
+ GList *paths;
+
++ python_init_successful = FALSE;
+ if (Py_IsInitialized ()) {
+ g_warning ("Python Should only be initialized once, since it's in class_init");
+ g_return_if_reached ();
+@@ -130,7 +139,7 @@ rb_python_module_init_python (void)
+
+ PySys_SetArgv (1, argv);
+
+- /* pygtk.require("2.8") */
++ /* pygtk.require("2.0") */
+ pygtk = PyImport_ImportModule ("pygtk");
+ if (pygtk == NULL) {
+ g_warning ("Could not import pygtk");
+@@ -140,11 +149,15 @@ rb_python_module_init_python (void)
+
+ mdict = PyModule_GetDict (pygtk);
+ require = PyDict_GetItemString (mdict, "require");
+- PyObject_CallObject (require, Py_BuildValue ("(S)", PyString_FromString ("2.8")));
++ PyObject_CallObject (require, Py_BuildValue ("(S)", PyString_FromString ("2.0")));
++ if (PyErr_Occurred ()) {
++ g_warning ("pygtk.require(2.0) failed");
++ PyErr_Print();
++ return;
++ }
+
+ /* import gobject */
+- init_pygobject ();
+- if (PyErr_Occurred ()) {
++ if (pygobject_init (2, 16, 0) == NULL) {
+ g_warning ("Could not initialize pygobject");
+ PyErr_Print();
+ return;
+@@ -154,7 +167,7 @@ rb_python_module_init_python (void)
+ pyg_disable_warning_redirections ();
+
+ /* import gtk */
+- init_pygtk ();
++ actually_init_pygtk ();
+ if (PyErr_Occurred ()) {
+ g_warning ("Could not initialize pygtk");
+ PyErr_Print();
+@@ -172,7 +185,7 @@ rb_python_module_init_python (void)
+
+ mdict = PyModule_GetDict (gtk);
+ pygtk_version = PyDict_GetItemString (mdict, "pygtk_version");
+- pygtk_required_version = Py_BuildValue ("(iii)", 2, 4, 0);
++ pygtk_required_version = Py_BuildValue ("(iii)", 2, 8, 0);
+ if (PyObject_Compare (pygtk_version, pygtk_required_version) == -1) {
+ g_warning("PyGTK %s required, but %s found.",
+ PyString_AsString (PyObject_Repr (pygtk_required_version)),
+@@ -264,6 +277,8 @@ rb_python_module_init_python (void)
+ gettext_args = Py_BuildValue ("ss", GETTEXT_PACKAGE, GNOMELOCALEDIR);
+ PyObject_CallObject (install, gettext_args);
+ Py_DECREF (gettext_args);
++
++ python_init_successful = TRUE;
+ }
+
+ static gboolean
+@@ -329,6 +344,11 @@ rb_python_module_load_with_gil (GTypeModule *module)
+ PyGILState_STATE state;
+ gboolean ret;
+
++ if (python_init_successful == FALSE) {
++ g_warning ("unable to load module as python runtime could not be initialized");
++ return FALSE;
++ }
++
+ state = pyg_gil_state_ensure ();
+ ret = rb_python_module_load (module);
+ pyg_gil_state_release (state);
+@@ -485,6 +505,12 @@ rb_python_module_new (const gchar *path,
+ return result;
+ }
+
++gboolean
++rb_python_init_successful (void)
++{
++ return python_init_successful;
++}
++
+ /* --- these are not module methods, they are here out of convenience --- */
+
+ #if 0
+diff --git a/shell/rb-python-module.h b/shell/rb-python-module.h
+index 5b2c152..30c1200 100644
+--- a/shell/rb-python-module.h
++++ b/shell/rb-python-module.h
+@@ -60,6 +60,8 @@ GObject *rb_python_module_new_object (RBPythonModule *module);
+
+ void rb_python_module_init_python (void);
+
++gboolean rb_python_init_successful (void);
++
+ void rb_python_garbage_collect (void);
+
+ void rb_python_shutdown (void);
+--
+cgit v0.8.3.1
diff --git a/media-sound/rhythmbox/files/rhythmbox-0.12.5-fix-daap-plugin-linking.patch b/media-sound/rhythmbox/files/rhythmbox-0.12.5-fix-daap-plugin-linking.patch
deleted file mode 100644
index 644615c3b35b..000000000000
--- a/media-sound/rhythmbox/files/rhythmbox-0.12.5-fix-daap-plugin-linking.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 3bf2e8b95d5a2c8000a7e46b73f0b92c5319e927 Mon Sep 17 00:00:00 2001
-From: Christophe Fergeau <cfergeau@mandriva.com>
-Date: Sat, 10 Oct 2009 12:16:35 +0000
-Subject: link daap plugin with RHYTHMBOX_LIBS (bug #597899)
-
-The DAAP plugin uses libsoup, so it needs to link with libsoup which is
-part of RHYTHMBOX_LIBS.
----
-diff --git a/plugins/daap/Makefile.am b/plugins/daap/Makefile.am
-index 90935ee..dfc1058 100644
---- a/plugins/daap/Makefile.am
-+++ b/plugins/daap/Makefile.am
-@@ -35,6 +35,7 @@ libdaap_la_LIBTOOLFLAGS = --tag=disable-static
- libdaap_la_LIBADD = \
- $(top_builddir)/shell/librhythmbox-core.la \
- $(DBUS_LIBS) \
-+ $(RHYTHMBOX_LIBS) \
- $(MDNS_LIBS)
-
- INCLUDES = \
---
-cgit v0.8.2