https://bugs.gentoo.org/show_bug.cgi?id=437356 From 37ea2854a21e50debdf7bc953a3411e5934b74d9 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Thu, 27 Sep 2012 16:53:22 +0000 Subject: Fix 2160 : Disable use of python bindings for libtorrent extensions and replace with session flag The fixes a GIL issue causing libtorrent segfault. https://code.google.com/p/libtorrent/issues/detail?id=369 Note: The ut_pex plugin (Peer Exchange) will now always be enabled. --- diff --git a/deluge/core/core.py b/deluge/core/core.py index 4bda811..4ca3d96 100644 --- a/deluge/core/core.py +++ b/deluge/core/core.py @@ -84,7 +84,10 @@ class Core(component.Component): while len(version) < 4: version.append(0) - self.session = lt.session(lt.fingerprint("DE", *version), flags=0) + # Note: All libtorrent python bindings to set plugins/extensions need to be disabled + # due to GIL issue. https://code.google.com/p/libtorrent/issues/detail?id=369 + # Setting session flags to 1 enables all libtorrent default plugins + self.session = lt.session(lt.fingerprint("DE", *version), flags=1) # Load the session state if available self.__load_session_state() @@ -103,9 +106,11 @@ class Core(component.Component): self.session.set_settings(self.settings) # Load metadata extension - self.session.add_extension(lt.create_metadata_plugin) - self.session.add_extension(lt.create_ut_metadata_plugin) - self.session.add_extension(lt.create_smart_ban_plugin) + # Note: All libtorrent python bindings to set plugins/extensions need to be disabled + # due to GIL issue. https://code.google.com/p/libtorrent/issues/detail?id=369 + # self.session.add_extension(lt.create_metadata_plugin) + # self.session.add_extension(lt.create_ut_metadata_plugin) + # self.session.add_extension(lt.create_smart_ban_plugin) # Create the components self.eventmanager = EventManager() diff --git a/deluge/core/preferencesmanager.py b/deluge/core/preferencesmanager.py index 40070bb..2a5cb1b 100644 --- a/deluge/core/preferencesmanager.py +++ b/deluge/core/preferencesmanager.py @@ -338,7 +338,10 @@ class PreferencesManager(component.Component): def _on_set_utpex(self, key, value): log.debug("utpex value set to %s", value) if value: - self.session.add_extension(lt.create_ut_pex_plugin) + # Note: All libtorrent python bindings to set plugins/extensions need to be disabled + # due to GIL issue. https://code.google.com/p/libtorrent/issues/detail?id=369 + #self.session.add_extension(lt.create_ut_pex_plugin) + pass def _on_set_encryption(self, key, value): log.debug("encryption value %s set to %s..", key, value) -- cgit v0.9.0.2