https://bugs.kde.org/show_bug.cgi?id=472453

            Bug ID: 472453
           Summary: krfb-virtualmonitor asserts when a client connects
    Classification: Applications
           Product: krfb
           Version: 23.04.3
          Platform: Archlinux
                OS: Linux
            Status: REPORTED
          Severity: crash
          Priority: NOR
         Component: general
          Assignee: grundleb...@googlemail.com
          Reporter: santiagocezar2...@gmail.com
  Target Milestone: ---

SUMMARY
krfb-virtualmonitor crashes right after a client connects, no image is send to
the client.


STEPS TO REPRODUCE
1. run `bin/krfb-virtualmonitor --name "banana" --resolution 1200x400
--password 1111 --port 5900`
2. connect from another device (using bVNC on Android in this case)
3. boom

OBSERVED RESULT
the program crashes when a new client connects

EXPECTED RESULT
the program should make a virtual monitor and display it on the client

SOFTWARE/OS VERSIONS
Linux: 6.4.3-arch1-2
KDE Plasma Version: 5.27.6
KDE Frameworks Version: 5.108.0
Qt Version: 5.15.10

ADDITIONAL INFORMATION

Graphics: Mesa Intel® UHD Graphics 620
Commit: ce562e82bb6524b558ca9f41ac81758d6c3d34e4

terminal output:
```
new client request
/usr/include/c++/13.1.1/optional:477: constexpr _Tp&
std::_Optional_base_impl<_Tp, _Dp>::_M_get() [with _Tp = PipeWireCursor; _Dp =
std::_Optional_base<PipeWireCursor, false, false>]: Assertion
'this->_M_is_engaged()' failed.
fish: Job 1, 'bin/krfb-virtualmonitor --name …' terminated by signal SIGABRT
(Abort)
```

```
#0  __pthread_kill_implementation (threadid=<optimized out>,
signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
#1  0x00007ffff5e9f2d3 in __pthread_kill_internal (signo=6, threadid=<optimized
out>) at pthread_kill.c:78
#2  0x00007ffff5e4fa08 in __GI_raise (sig=sig@entry=6) at
../sysdeps/posix/raise.c:26
#3  0x00007ffff5e38538 in __GI_abort () at abort.c:79
#4  0x00007ffff60dd3b2 in std::__glibcxx_assert_fail(char const*, int, char
const*, char const*)
    (file=file@entry=0x7fffe805b2e0 "/usr/include/c++/13.1.1/optional",
line=line@entry=477, function=function@entry=0x7fffe805b248 "constexpr _Tp&
std::_Optional_base_impl<_Tp, _Dp>::_M_get() [with _Tp = PipeWireCursor; _Dp =
std::_Optional_base<PipeWireCursor, false, false>]",
condition=condition@entry=0x7fffe805b000 "this->_M_is_engaged()") at
/usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/debug.cc:61
#5  0x00007fffe804fa5c in std::_Optional_base_impl<PipeWireCursor,
std::_Optional_base<PipeWireCursor, false, false> >::_M_get() (this=<optimized
out>) at /usr/include/c++/13.1.1/optional:477
#6  std::_Optional_base_impl<PipeWireCursor,
std::_Optional_base<PipeWireCursor, false, false> >::_M_get() (this=<optimized
out>) at /usr/include/c++/13.1.1/optional:475
#7  std::optional<PipeWireCursor>::operator->() (this=<optimized out>) at
/usr/include/c++/13.1.1/optional:966
#8  PWFrameBuffer::cursorPosition() (this=<optimized out>) at
/usr/src/debug/krfb/krfb-23.04.3/framebuffers/pipewire/pw_framebuffer.cpp:546
#9  0x0000555555568abd in RfbServerManager::updateScreens()
(this=0x5555555846b0 <(anonymous
namespace)::Q_QGS_s_instance::innerFunction()::holder>) at
/home/santi/Cositas/Contrib/krfb/krfb/rfbservermanager.cpp:148
#10 0x000055555556b8a9 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>,
QtPrivate::List<>, void, void (RfbServerManager::*)()>::call(void
(RfbServerManager::*)(), RfbServerManager*, void**)
    (f=(void (RfbServerManager::*)(class RfbServerManager * const))
0x555555568a5a <RfbServerManager::updateScreens()>, o=0x5555555846b0
<(anonymous namespace)::Q_QGS_s_instance::innerFunction()::holder>,
arg=0x7fffffffd440)
    at /usr/include/qt/QtCore/qobjectdefs_impl.h:152
#11 0x000055555556b51b in QtPrivate::FunctionPointer<void
(RfbServerManager::*)()>::call<QtPrivate::List<>, void>(void
(RfbServerManager::*)(), RfbServerManager*, void**)
    (f=(void (RfbServerManager::*)(class RfbServerManager * const))
0x555555568a5a <RfbServerManager::updateScreens()>, o=0x5555555846b0
<(anonymous namespace)::Q_QGS_s_instance::innerFunction()::holder>,
arg=0x7fffffffd440)
    at /usr/include/qt/QtCore/qobjectdefs_impl.h:185
#12 0x000055555556ae67 in QtPrivate::QSlotObject<void (RfbServerManager::*)(),
QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*,
void**, bool*)
    (which=1, this_=0x55555572b810, r=0x5555555846b0 <(anonymous
namespace)::Q_QGS_s_instance::innerFunction()::holder>, a=0x7fffffffd440,
ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:418
#13 0x00007ffff66d1237 in QtPrivate::QSlotObjectBase::call(QObject*, void**)
(a=0x7fffffffd440, r=<optimized out>, this=0x55555572b810, this=<optimized
out>, r=<optimized out>, a=<optimized out>)
    at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#14 doActivate<false>(QObject*, int, void**) (sender=0x5555556daee0,
signal_index=3, argv=0x7fffffffd440) at kernel/qobject.cpp:3925
#15 0x00007ffff66d2d6f in QTimer::timeout(QTimer::QPrivateSignal)
(this=<optimized out>, _t1=...) at .moc/moc_qtimer.cpp:205
#16 0x00007ffff66c3cee in QObject::event(QEvent*) (this=0x5555556daee0,
e=0x7fffffffd5b0) at kernel/qobject.cpp:1324
#17 0x00007ffff737893f in QApplicationPrivate::notify_helper(QObject*, QEvent*)
(this=<optimized out>, receiver=0x5555556daee0, e=0x7fffffffd5b0) at
kernel/qapplication.cpp:3640
#18 0x00007ffff669c2f8 in QCoreApplication::notifyInternal2(QObject*, QEvent*)
(receiver=0x5555556daee0, event=0x7fffffffd5b0) at
kernel/qcoreapplication.cpp:1064
#19 0x00007ffff66ea9bb in QTimerInfoList::activateTimers()
(this=0x555555615020) at kernel/qtimerinfo_unix.cpp:643
#20 0x00007ffff66eaf9a in timerSourceDispatch(GSource*, GSourceFunc, gpointer)
(source=<optimized out>) at kernel/qeventdispatcher_glib.cpp:183
#21 0x00007ffff4b0fa31 in g_main_dispatch (context=0x7fffec000ee0) at
../glib/glib/gmain.c:3460
#22 g_main_context_dispatch (context=0x7fffec000ee0) at
../glib/glib/gmain.c:4200
#23 0x00007ffff4b6ccc9 in g_main_context_iterate.isra.0
(context=context@entry=0x7fffec000ee0, block=block@entry=1,
dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4276
#24 0x00007ffff4b0d0e2 in g_main_context_iteration (context=0x7fffec000ee0,
may_block=1) at ../glib/glib/gmain.c:4343
#25 0x00007ffff66eb15c in
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
(this=0x555555615560, flags=...) at kernel/qeventdispatcher_glib.cpp:423
#26 0x00007ffff669b004 in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)
(this=this@entry=0x7fffffffd860, flags=..., flags@entry=...) at
../../include/QtCore/../../src/corelib/global/qflags.h:69
#27 0x00007ffff669c4a3 in QCoreApplication::exec() () at
../../include/QtCore/../../src/corelib/global/qflags.h:121
#28 0x00005555555609fc in main(int, char**) (argc=9, argv=0x7fffffffdb58) at
/home/santi/Cositas/Contrib/krfb/krfb/main-virtualmonitor.cpp:174
```

an observation: it doesn't seem to be creating the virtual monitor before
crashing, but the version from the arch repos does (which also crashes, for a
different reason)

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to