mozilla-vpn-client icon indicating copy to clipboard operation
mozilla-vpn-client copied to clipboard

Blank screen (due to timer overflow?)

Open emilio opened this issue 4 months ago • 5 comments

Describe the bug

The GUI is blank. The console is totally flooded by:

[19.10.2025 19:32:01.315] Warning: QTimer::start: negative intervals aren't allowed; the interval will be set to 1ms.

VPN version:

Mozilla VPN 2.31.1

Affected Platforms:

Linux

Steps to reproduce:

Run the mozillavpn binary.

Expected result:

A working GUI.

Actual result:

Blank screen.

Additional notes:

I think at least the console spam seems like an integer overflow?

(gdb) p now
$14 = {d = {d = 0x199fdf5e9828f, data = {status = 143, msecs = 1760902375810}}}
(gdb) p expire
$15 = {d = {d = 0x19a8dec90f94f, data = {status = 79, msecs = 1763317682425}}}
(gdb) p now.msecsTo(expire)
$16 = 2418906615
(gdb) bt
#0  checkInterval (caller=0x7ffff5086699 "QTimer::start", interval=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qtimer.cpp:252
#1  QTimer::start (this=0x555556f14988, interval=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qtimer.cpp:285
#2  QTimer::start (this=0x555556f14988, msec=-1876060681) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qtimer.cpp:244
#3  0x0000555555710e34 in AddonConditionWatcherTriggerTimeSecs::maybeStartTimer (this=0x555556f14970)
    at /usr/src/debug/mozillavpn/mozillavpn-2.31.1/src/addons/conditionwatchers/addonconditionwatchertriggertimesecs.cpp:56
#4  0x0000555555710f01 in operator() (__closure=0x555556ee6a40)
    at /usr/src/debug/mozillavpn/mozillavpn-2.31.1/src/addons/conditionwatchers/addonconditionwatchertriggertimesecs.cpp:30
#5  operator() (__closure=<optimized out>) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:116
#6  QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<long unsigned int>, QtPrivate::List<>, void, AddonConditionWatcherTriggerTimeSecs::AddonConditionWatcherTriggerTimeSecs(QObject*, qint64)::<lambda()> >::call(AddonConditionWatcherTriggerTimeSecs::AddonConditionWatcherTriggerTimeSecs(QObject*, qint64)::<lambda()>&, void**)::<lambda()> > (args=<optimized out>, fn=...) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:65
#7  QtPrivate::FunctorCall<std::integer_sequence<long unsigned int>, QtPrivate::List<>, void, AddonConditionWatcherTriggerTimeSecs::AddonConditionWatcherTriggerTimeSecs(QObject*, qint64)::<lambda()> >::call (f=..., arg=<optimized out>) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:115
#8  QtPrivate::FunctorCallable<AddonConditionWatcherTriggerTimeSecs::AddonConditionWatcherTriggerTimeSecs(QObject*, qint64)::<lambda()> >::call<QtPrivate::List<>, void> (
    f=..., arg=<optimized out>) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:337
#9  QtPrivate::QCallableObject<AddonConditionWatcherTriggerTimeSecs::AddonConditionWatcherTriggerTimeSecs(QObject*, qint64)::<lambda()>, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=0x555556ee6a30, r=<optimized out>, a=<optimized out>, ret=<optimized out>)
    at /usr/include/qt6/QtCore/qobjectdefs_impl.h:547
#10 0x00007ffff4dd716f in QtPrivate::QSlotObjectBase::call (this=<optimized out>, r=<optimized out>, a=<optimized out>, this=<optimized out>, r=<optimized out>,
    a=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobjectdefs_impl.h:461
#11 doActivate<false> (sender=<optimized out>, signal_index=<optimized out>, argv=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:4255
#12 0x00007ffff4de439c in QMetaObject::activate<void, QTimer::QPrivateSignal> (sender=<optimized out>, mo=<optimized out>, local_signal_index=0, ret=0x0)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobjectdefs.h:319
#13 QTimer::timeout (this=<optimized out>, _t1=...) at /usr/src/debug/qt6-base/build/src/corelib/Core_autogen/include/moc_qtimer.cpp:182
#14 QTimer::timerEvent (e=<optimized out>, this=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qtimer.cpp:322
#15 QTimer::timerEvent (this=<optimized out>, e=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qtimer.cpp:316
#16 0x00007ffff4dc44f6 in QObject::event (this=<optimized out>, e=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:1386
#17 0x00007ffff67020a0 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x555556f14988, e=0x7fffffffce30)
    at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:3307
#18 0x00007ffff4d6a6c8 in QCoreApplication::notifyInternal2 (receiver=0x555556f14988, event=0x7fffffffce30)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1109
#19 0x00007ffff4f2c6af in QCoreApplication::sendEvent (receiver=<optimized out>, event=0x7fffffffce30)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1549
#20 QTimerInfoList::activateTimers (this=0x555556b67df0) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qtimerinfo_unix.cpp:426
#21 0x00007ffff504dad1 in timerSourceDispatch (source=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:152
#22 idleTimerSourceDispatch (source=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:199
#23 0x00007ffff76a8f4d in g_main_dispatch (context=0x7fff94000f60) at ../glib/glib/gmain.c:3565
#24 0x00007ffff76aa617 in g_main_context_dispatch_unlocked (context=0x7fff94000f60) at ../glib/glib/gmain.c:4425
#25 g_main_context_iterate_unlocked (context=context@entry=0x7fff94000f60, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
    at ../glib/glib/gmain.c:4490
#26 0x00007ffff76aa825 in g_main_context_iteration (context=0x7fff94000f60, may_block=1) at ../glib/glib/gmain.c:4556
#27 0x00007ffff504a9d2 in QEventDispatcherGlib::processEvents (this=0x555556aeedd0, flags=...)

emilio avatar Oct 19 '25 17:10 emilio

I removed ~/.config/mozilla/vpn.moz and still blank, but the timer thing no longer happens.

emilio avatar Oct 19 '25 17:10 emilio

Ah no, still happening

emilio avatar Oct 19 '25 17:10 emilio

Full log: mozillavpn.log

emilio avatar Oct 19 '25 17:10 emilio

I think the blank screen issue is a dupe of https://github.com/mozilla-mobile/mozilla-vpn-client/pull/10832. @oskirby the timer issue might be different tho / worth fixing, since I think it basically keeps eating cpu unnecessarily? But not sure, feel free to close if needed.

emilio avatar Nov 01 '25 20:11 emilio

I confirm the flooding of the timer messages (on Fedora 43, nightly build of yesterday). Maybe it comes from the @oskirby's PR (your log takes root in /src/addons/conditionwatchers/): https://github.com/mozilla-mobile/mozilla-vpn-client/pull/9711/files#diff-36615cfda67b601e1189921f09c64ab299e8ffab19ac83d33fc1ae821b0f0940L59-L61

The check on the timer has been removed. But it is quite strange as there is a check the lines before:

https://github.com/mozilla-mobile/mozilla-vpn-client/pull/9711/files#diff-36615cfda67b601e1189921f09c64ab299e8ffab19ac83d33fc1ae821b0f0940R51-R53

arnobl avatar Nov 26 '25 19:11 arnobl

@arnobl @emilio this should be fixed in https://github.com/mozilla-mobile/mozilla-vpn-client/commit/ac25fdf9be9ce1f5356e4f3f90303362bc693a4e , thanks for reporting and please let us know if you run into any problem in the future.

artfwo avatar Dec 12 '25 18:12 artfwo