diff options
-rw-r--r-- | doc/changelog.asciidoc | 12 | ||||
-rw-r--r-- | qutebrowser/browser/webengine/notification.py | 4 | ||||
-rw-r--r-- | qutebrowser/misc/earlyinit.py | 12 |
3 files changed, 24 insertions, 4 deletions
diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc index 901461023..03eedba79 100644 --- a/doc/changelog.asciidoc +++ b/doc/changelog.asciidoc @@ -15,6 +15,18 @@ breaking changes (such as renamed commands) can happen in minor releases. // `Fixed` for any bug fixes. // `Security` to invite users to upgrade in case of vulnerabilities. +[[v2.4.1]] +v2.4.1 (unreleased) +------------------- + +Fixed +~~~~~ + +- Speculative fix for an immediate crash at start with the macOS/Windows + binaries (in certain rare environments). +- Speculative fix for a qutebrowser crash when the notification daemon crashes + while showing the notification. + [[v2.4.0]] v2.4.0 (2021-10-21) ------------------- diff --git a/qutebrowser/browser/webengine/notification.py b/qutebrowser/browser/webengine/notification.py index e40b3e736..f8e1a59b1 100644 --- a/qutebrowser/browser/webengine/notification.py +++ b/qutebrowser/browser/webengine/notification.py @@ -715,6 +715,10 @@ class DBusNotificationAdapter(AbstractNotificationAdapter): # https://github.com/KDE/plasma-workspace/blob/v5.21.4/libnotificationmanager/server_p.cpp#L227-L237 # Created too many similar notifications in quick succession "org.freedesktop.Notifications.Error.ExcessNotificationGeneration", + + # From https://crashes.qutebrowser.org/view/b8c9838a - probably when + # notification daemon crashes? + "org.freedesktop.DBus.Error.Spawn.ChildSignaled", } def __init__(self, parent: QObject = None) -> None: diff --git a/qutebrowser/misc/earlyinit.py b/qutebrowser/misc/earlyinit.py index c4ff0bb85..1863dedb3 100644 --- a/qutebrowser/misc/earlyinit.py +++ b/qutebrowser/misc/earlyinit.py @@ -111,17 +111,21 @@ def init_faulthandler(fileobj=sys.__stderr__): Args: fobj: An opened file object to write the traceback to. """ - if fileobj is None: + try: + faulthandler.enable(fileobj) + except (RuntimeError, AttributeError) as e: # When run with pythonw.exe, sys.__stderr__ can be None: # https://docs.python.org/3/library/sys.html#sys.__stderr__ - # If we'd enable faulthandler in that case, we just get a weird - # exception, so we don't enable faulthandler if we have no stdout. + # + # With PyInstaller, it can be a NullWriter raising AttributeError on + # fileno: https://github.com/pyinstaller/pyinstaller/issues/4481 # # Later when we have our data dir available we re-enable faulthandler # to write to a file so we can display a crash to the user at the next # start. + log.debug(f"Failed to enable early faulthandler: {e}", exc_info=True) return - faulthandler.enable(fileobj) + if (hasattr(faulthandler, 'register') and hasattr(signal, 'SIGUSR1') and sys.stderr is not None): # If available, we also want a traceback on SIGUSR1. |