summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Alejandro <ivanalejandro0@gmail.com>2014-12-30 19:53:14 -0300
committerIvan Alejandro <ivanalejandro0@gmail.com>2014-12-30 20:04:03 -0300
commit34bdb47251b93bcfc767aec341490386a08ba4a6 (patch)
tree3ab25d34cf388f40caac2459179caaf72494322c
parentf60b7d52e2938a48ad0a79b620274c531ca252a6 (diff)
Disable signal disconnection and untrack.0.8.0rc1
This temporary hack prevents the app to have segfaults when the first run wizard finishes. For more information look at https://leap.se/code/issues/6597
-rw-r--r--src/leap/bitmask/gui/mainwindow.py22
-rw-r--r--src/leap/bitmask/gui/signaltracker.py13
-rw-r--r--src/leap/bitmask/gui/wizard.py3
3 files changed, 31 insertions, 7 deletions
diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py
index 7d55a5d5..b0826303 100644
--- a/src/leap/bitmask/gui/mainwindow.py
+++ b/src/leap/bitmask/gui/mainwindow.py
@@ -288,7 +288,11 @@ class MainWindow(QtGui.QMainWindow, SignalTracker):
if self._first_run():
self._wizard_firstrun = True
- self.disconnect_and_untrack()
+
+ # HACK FIX: disconnection of signals triggers a reconnection later
+ # chich segfaults on wizard quit
+ # self.disconnect_and_untrack()
+
self._wizard = Wizard(backend=self._backend,
leap_signaler=self._leap_signaler)
# Give this window time to finish init and then show the wizard
@@ -341,6 +345,8 @@ class MainWindow(QtGui.QMainWindow, SignalTracker):
conntrack = self.connect_and_track
# XXX does this goes in here? this will be triggered when the login or
# wizard requests provider data
+
+ # XXX - here segfaults if we did a disconnect_and_untrack
conntrack(sig.prov_check_api_certificate, self._get_provider_details)
conntrack(sig.prov_get_details, self._provider_get_details)
@@ -417,7 +423,11 @@ class MainWindow(QtGui.QMainWindow, SignalTracker):
# This happens if the user finishes the provider
# setup but does not register
self._wizard = None
- self._backend_connect(only_tracked=True)
+
+ # HACK FIX: disconnection of signals triggers a reconnection later
+ # chich segfaults on wizard quit
+ # self._backend_connect(only_tracked=True)
+
if self._wizard_firstrun:
self._finish_init()
@@ -433,7 +443,9 @@ class MainWindow(QtGui.QMainWindow, SignalTracker):
there.
"""
if self._wizard is None:
- self.disconnect_and_untrack()
+ # HACK FIX: disconnection of signals triggers a reconnection later
+ # chich segfaults on wizard quit
+ # self.disconnect_and_untrack()
self._wizard = Wizard(backend=self._backend,
leap_signaler=self._leap_signaler)
self._wizard.accepted.connect(self._finish_init)
@@ -764,7 +776,9 @@ class MainWindow(QtGui.QMainWindow, SignalTracker):
self.eip_needs_login.emit()
self._wizard = None
- self._backend_connect(only_tracked=True)
+ # HACK FIX: disconnection of signals triggers a reconnection later
+ # chich segfaults on wizard quit
+ # self._backend_connect(only_tracked=True)
else:
domain = self._settings.get_provider()
if domain is not None:
diff --git a/src/leap/bitmask/gui/signaltracker.py b/src/leap/bitmask/gui/signaltracker.py
index 4884334d..c83359c4 100644
--- a/src/leap/bitmask/gui/signaltracker.py
+++ b/src/leap/bitmask/gui/signaltracker.py
@@ -14,9 +14,12 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+import logging
from PySide import QtCore
+logger = logging.getLogger(__name__)
+
class SignalTracker(QtCore.QObject):
"""
@@ -39,6 +42,10 @@ class SignalTracker(QtCore.QObject):
:param method: the method to call when the signal is triggered.
:type method: callable, Slot or Signal
"""
+ if (signal, method) in self._connected_signals:
+ logger.warning("Signal already connected.")
+ return
+
self._connected_signals.append((signal, method))
signal.connect(method)
@@ -49,7 +56,9 @@ class SignalTracker(QtCore.QObject):
for signal, method in self._connected_signals:
try:
signal.disconnect(method)
- except RuntimeError:
- pass # Signal was not connected
+ except (TypeError, RuntimeError) as e:
+ # most likely the signal was not connected
+ logger.warning("Disconnect error: {0!r}".format(e))
+ logger.warning("Signal: {0!r} -> {1!r}".format(signal, method))
self._connected_signals = []
diff --git a/src/leap/bitmask/gui/wizard.py b/src/leap/bitmask/gui/wizard.py
index f1eab211..35043a68 100644
--- a/src/leap/bitmask/gui/wizard.py
+++ b/src/leap/bitmask/gui/wizard.py
@@ -152,7 +152,8 @@ class Wizard(QtGui.QWizard, SignalTracker):
self._provider_setup_ok = False
self.ui.lnProvider.setText('')
self.ui.grpCheckProvider.setVisible(False)
- self.disconnect_and_untrack()
+ # HACK FIX: disconnection of signals triggers a segfault on quit
+ # self.disconnect_and_untrack()
def _load_configured_providers(self):
"""