moveToThread on a socket should do the following: 1. cancel socket notifiers 2. change thread affinity 3. (in new thread) re-enable socket notifiers.
Could be that step 1 doesn't remove already pending notifications when using the gnome event dispatcher. For a safe multithreaded server, you should pass the socket descriptor from QTcpServer::incomingConnection to the thread that will handle that connection. See the note in http://qt-project.org/doc/qt-5.0/qtnetwork/qtcpserver.html#incomingConnection On 9 September 2013 10:32, Benjamin Zeller <zeller.benja...@web.de> wrote: > Hello, > > i'm currently stress-testing a application at work and came across this > problem. > The application accepts connections and pushes the created sockets > to a worker thread (moveToThread), the worker thread then handles the > rest. > But sometimes when the socket was already closed in the thread i > get a SEGFAULT. It seems something in the mainthread tries to access > the socket engine. > > After debugging it i saw that in the backtrace > QCoreApplication::sendEvent is used, instead of postEvent. > > > > > Backtrace Mainloop (stops in qabstractsocket.cpp line 741): > > if (readSocketNotifierStateSet && socketEngine && > >> readSocketNotifierState != > socketEngine->isReadNotificationEnabled()) { > socketEngine->setReadNotificationEnabled(readSocketNotifierState); > readSocketNotifierStateSet = false; > } > return true; > > > > In the Thread backtrace you can see the thread is closed > ------------------------ Backtrace Thread ------------------------------ > Thread 17 (Thread 0x7f8fc0df3700 (LWP 5101)): > #0 0x00007f8fe0d397fd in QLocalePrivate::plus (this=0x7f8f9c010260) at > tools/qlocale_p.h:228 > No locals. > #1 0x00007f8fe0d363a0 in QLocalePrivate::unsLongLongToString > (this=0x7f8f9c010260, l=15, precision=-1, base=10, width=-1, flags=0) at > tools/qlocale.cpp:3036 > No locals. > #2 0x00007f8fe0ddc0af in QTextStreamPrivate::putNumber > (this=0x7f8f9c0140e0, number=15, negative=false) at io/qtextstream.cpp:2220 > flags = 0 > dd = 0x7f8f9c010260 > result = {static null = {<No data fields>}, d = 0x7f8fe0f5bd60 > <QArrayData::shared_null>} > numberFlags = {i = 0} > base = 10 > #3 0x00007f8fe0ddc5f0 in QTextStream::operator<< (this=0x7f8f9c012420, > i=15) at io/qtextstream.cpp:2296 > d = 0x7f8f9c0140e0 > __PRETTY_FUNCTION__ = "QTextStream& QTextStream::operator<<(int)" > #4 0x00007f8fe17463e3 in QDebug::operator<< (this=0x7f8fc0df1cd0, t=15) > at /opt/Qt/5.1.1/include/QtCore/qdebug.h:107 > No locals. > #5 0x00007f8fe17564f3 in Tufao::tDebug () at > > /home/zbenjamin/workspace.work/tufao/src/threadedhttprequestdispatcher.cpp:284 > t = 0xae1440 > __PRETTY_FUNCTION__ = "QDebug Tufao::tDebug()" > #6 0x00007f8fe175c819 in Tufao::WorkerThreadControl::onRequestClosed > (this=0x7f8fc0df2d50) at > /home/zbenjamin/workspace.work/tufao/src/priv/workerthreadcontrol.cpp:46 > No locals. > #7 0x00007f8fe175c5bd in > QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, > void, void (Tufao::WorkerThreadControl::*)()>::call(void > (Tufao::WorkerThreadControl::*)(), Tufao::WorkerThreadControl*, void**) > (f=(void (Tufao::WorkerThreadControl::*)(Tufao::WorkerThreadControl * > const)) 0x7f8fe175c800 <Tufao::WorkerThreadControl::onRequestClosed()>, > o=0x7f8fc0df2d50, arg=0x7f8fc0df1f30) at > /opt/Qt/5.1.1/include/QtCore/qobjectdefs_impl.h:508 > No locals. > #8 0x00007f8fe175c550 in QtPrivate::FunctionPointer<void > (Tufao::WorkerThreadControl::*)()>::call<QtPrivate::List<>, void>(void > (Tufao::WorkerThreadControl::*)(), Tufao::WorkerThreadControl*, void**) > (f=(void (Tufao::WorkerThreadControl::*)(Tufao::WorkerThreadControl * > const)) 0x7f8fe175c800 <Tufao::WorkerThreadControl::onRequestClosed()>, > o=0x7f8fc0df2d50, arg=0x7f8fc0df1f30) at > /opt/Qt/5.1.1/include/QtCore/qobjectdefs_impl.h:527 > No locals. > #9 0x00007f8fe175c4bd in QtPrivate::QSlotObject<void > (Tufao::WorkerThreadControl::*)(), QtPrivate::List<>, void>::impl(int, > QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, > this_=0x7f8f9c0132c0, r=0x7f8fc0df2d50, a=0x7f8fc0df1f30, ret=0x0) at > /opt/Qt/5.1.1/include/QtCore/qobject_impl.h:147 > No locals. > #10 0x00007f8fe0ecc69b in QtPrivate::QSlotObjectBase::call > (this=0x7f8f9c0132c0, r=0x7f8fc0df2d50, a=0x7f8fc0df1f30) at > ../../include/QtCore/../../src/corelib/kernel/qobject_impl.h:130 > No locals. > #11 0x00007f8fe0ec9a02 in QMetaObject::activate (sender=0xc48dd0, > signalOffset=3, local_signal_index=3, argv=0x0) at kernel/qobject.cpp:3471 > obj = {d = 0x7f8f9c0132c0} > receiverInSameThread = true > sw = {receiver = 0x7f8fc0df2d50, previousSender = 0x0, > currentSender = {sender = 0xc48dd0, signal = 6, ref = 1}, switched = true} > callFunction = 0x7f8f9c0132c0 > receiver = 0x7f8fc0df2d50 > method_relative = 0 > c = 0x7f8f9c011680 > last = 0x7f8f9c011680 > locker = {val = 140255935355400} > connectionLists = {connectionLists = 0x1144920} > list = 0xeeb188 > signal_index = 6 > empty_argv = {0x0} > currentThreadId = 0x7f8fc0df3700 > __PRETTY_FUNCTION__ = "static void > QMetaObject::activate(QObject*, int, int, void**)" > #12 0x00007f8fe0ec934c in QMetaObject::activate (sender=0xc48dd0, > m=0x7f8fe197e4a0 <Tufao::HttpServerRequest::staticMetaObject>, > local_signal_index=3, argv=0x0) at kernel/qobject.cpp:3354 > No locals. > #13 0x00007f8fe175d6c9 in Tufao::HttpServerRequest::close > (this=0xc48dd0) at > > /home/zbenjamin/workspace.work/tufao-build/src/moc_httpserverrequest.cpp:193 > No locals. > #14 0x00007f8fe175d39c in Tufao::HttpServerRequest::qt_static_metacall > (_o=0xc48dd0, _c=QMetaObject::InvokeMetaMethod, _id=3, > _a=0x7f8fc0df2120) at > /home/zbenjamin/workspace.work/tufao-build/src/moc_httpserverrequest.cpp:93 > _t = 0xc48dd0 > #15 0x00007f8fe0ec9afb in QMetaObject::activate (sender=0x11010b0, > signalOffset=7, local_signal_index=2, argv=0x0) at kernel/qobject.cpp:3479 > receiverInSameThread = true > sw = {receiver = 0xc48dd0, previousSender = 0x0, currentSender > = {sender = 0x11010b0, signal = 9, ref = 1}, switched = true} > callFunction = 0x7f8fe175d310 > <Tufao::HttpServerRequest::qt_static_metacall(QObject*, > QMetaObject::Call, int, void**)> > receiver = 0xc48dd0 > method_relative = 3 > c = 0xdefea0 > last = 0xe338e0 > locker = {val = 140255935355448} > connectionLists = {connectionLists = 0x113e4e0} > list = 0xbf3858 > signal_index = 9 > empty_argv = {0x0} > currentThreadId = 0x7f8fc0df3700 > __PRETTY_FUNCTION__ = "static void > QMetaObject::activate(QObject*, int, int, void**)" > #16 0x00007f8fe0ec934c in QMetaObject::activate (sender=0x11010b0, > m=0x7f8fe16cd1e0 <QAbstractSocket::staticMetaObject>, > local_signal_index=2, argv=0x0) at kernel/qobject.cpp:3354 > No locals. > #17 0x00007f8fe142276d in QAbstractSocket::disconnected (this=0x11010b0) > at .moc/debug-shared/moc_qabstractsocket.cpp:366 > No locals. > #18 0x00007f8fe1421c42 in QAbstractSocket::disconnectFromHost > (this=0x11010b0) at socket/qabstractsocket.cpp:2700 > d = 0xd30ab0 > previousState = QAbstractSocket::ClosingState > #19 0x00007f8fe141cce7 in QAbstractSocketPrivate::canReadNotification > (this=0xd30ab0) at socket/qabstractsocket.cpp:701 > q = 0x11010b0 > rsncrollback = {varRef = @0xd30b88, oldValue = true} > newBytes = 0 > hasData = false > #20 0x00007f8fe1420b8a in QAbstractSocket::waitForBytesWritten > (this=0x11010b0, msecs=30000) at socket/qabstractsocket.cpp:2181 > readyToRead = true > readyToWrite = true > d = 0xd30ab0 > __PRETTY_FUNCTION__ = "virtual bool > QAbstractSocket::waitForBytesWritten(int)" > stopWatch = {t1 = 10161, t2 = 636117446} > #21 0x00007f8fe173b359 in Tufao::HttpFileServer::serveFile > (fileName=..., request=..., response=...) at > /home/zbenjamin/workspace.work/tufao/src/httpfileserver.cpp:243 > fileInfo = {d_ptr = {d = 0x7f8f9c012920}} > file = {<QFileDevice> = {<QIODevice> = {<QObject> = > {_vptr.QObject = 0x7f8fe133fc50 <vtable for QFile+16>, static > staticMetaObject = {d = {superdata = 0x0, stringdata = 0x7f8fe1001520 > <qt_meta_stringdata_QObject>, data = 0x7f8fe1001640 > <qt_meta_data_QObject>, static_metacall = 0x7f8fe0ecbff4 > <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, > relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = > 0x7f8f9c010cb0}, static staticQtMetaObject = {d = {superdata = 0x0, > stringdata = 0x7f8fe104e220 <qt_meta_stringdata_Qt>, data = > 0x7f8fe1057c00 <qt_meta_data_Qt>, static_metacall = 0x0, > relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = > {d = {superdata = 0x7f8fe133df20 <QObject::staticMetaObject>, stringdata > = 0x7f8fe1061e40 <qt_meta_stringdata_QIODevice>, data = 0x7f8fe1061f40 > <qt_meta_data_QIODevice>, static_metacall = 0x7f8fe0f4f7a0 > <QIODevice::qt_static_metacall(QObject*, QMetaObject::Call, int, > void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}}, static > staticMetaObject = {d = {superdata = 0x7f8fe133ff00 > <QIODevice::staticMetaObject>, stringdata = 0x7f8fe1061d40 > <qt_meta_stringdata_QFileDevice>, data = 0x7f8fe1061d80 > <qt_meta_data_QFileDevice>, static_metacall = 0x7f8fe0f4f6b4 > <QFileDevice::qt_static_metacall(QObject*, QMetaObject::Call, int, > void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}}, static > staticMetaObject = {d = {superdata = 0x7f8fe133fd80 > <QFileDevice::staticMetaObject>, stringdata = 0x7f8fe1061c60 > <qt_meta_stringdata_QFile>, data = 0x7f8fe1061c80 <qt_meta_data_QFile>, > static_metacall = 0x7f8fe0f4f5c8 <QFile::qt_static_metacall(QObject*, > QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = > 0x0}}} > ranges = {{p = {static shared_null = {ref = {atomic = {_q_value > = -1}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d = > 0x7f8fe0f5e950 <QListData::shared_null>}, d = 0x7f8fe0f5e950 > <QListData::shared_null>}} > __PRETTY_FUNCTION__ = "static void > Tufao::HttpFileServer::serveFile(const QString&, > Tufao::HttpServerRequest&, Tufao::HttpServerResponse&)" > #22 0x00007f8fe173d445 in Tufao::HttpFileServer::handleRequest > (request=..., response=..., rootDir=...) at > /home/zbenjamin/workspace.work/tufao/src/httpfileserver.cpp:373 > fileName = {static null = {<No data fields>}, d = 0x7f8f9c00fbf0} > #23 0x00007f8fe173c7b3 in Tufao::HttpFileServer::__lambda1::operator() > (__closure=0x7f8f9c003530, request=..., response=...) at > /home/zbenjamin/workspace.work/tufao/src/httpfileserver.cpp:347 > dir = {static null = {<No data fields>}, d = 0xae18a0} > #24 0x00007f8fe173ca0d in > std::_Function_handler<bool(Tufao::HttpServerRequest&, > Tufao::HttpServerResponse&), Tufao::HttpFileServer::handler(const > QString&)::__lambda1>::_M_invoke(const std::_Any_data &, > Tufao::HttpServerRequest &, Tufao::HttpServerResponse &) (__functor=..., > __args#0=..., __args#1=...) at /usr/include/c++/4.8.1/functional:2057 > No locals. > #25 0x00007f8fe173f64f in std::function<bool (Tufao::HttpServerRequest&, > Tufao::HttpServerResponse&)>::operator()(Tufao::HttpServerRequest&, > Tufao::HttpServerResponse&) const (this=0x7f8f9c0034a8, __args#0=..., > __args#1=...) at /usr/include/c++/4.8.1/functional:2468 > No locals. > #26 0x00007f8fe173e6e4 in Tufao::HttpServerRequestRouter::handleRequest > (this=0x7f8f9c0013b0, request=..., response=...) at > /home/zbenjamin/workspace.work/tufao/src/httpserverrequestrouter.cpp:96 > args = {<QList<QString>> = {{p = {static shared_null = {ref = > {atomic = {_q_value = -1}}, alloc = 0, begin = 0, end = 0, array = > {0x0}}, d = 0x7f8fe0f5e950 <QListData::shared_null>}, d = 0x7f8fe0f5e950 > <QListData::shared_null>}}, <No data fields>} > backup = {d = {data = {c = 0 '\000', uc = 0 '\000', s = 0, sc = > 0 '\000', us = 0, i = 0, u = 0, l = 0, ul = 0, b = false, d = 0, f = 0, > real = 0, ll = 0, ull = 0, o = 0x0, ptr = 0x0, shared = 0x0}, type = 0, > is_shared = 0, is_null = 1}} > match = {d = {d = 0x7f8f9c015860}} > mapping = @0x7f8f9c003498: {path = {d = {d = 0x7f8f9c003240}}, > method = {d = 0x7f8fe0f5bd60 <QArrayData::shared_null>}, handler = > {<std::_Maybe_unary_or_binary_function<bool, Tufao::HttpServerRequest&, > Tufao::HttpServerResponse&>> = > {<std::binary_function<Tufao::HttpServerRequest&, > Tufao::HttpServerResponse&, bool>> = {<No data fields>}, <No data > fields>}, <std::_Function_base> = {static _M_max_size = 16, static > _M_max_align = 8, _M_functor = {_M_unused = {_M_object = 0x7f8f9c003530, > _M_const_object = 0x7f8f9c003530, _M_function_pointer = 0x7f8f9c003530, > _M_member_pointer = (void > (std::_Undefined_class::*)(std::_Undefined_class * const)) > 0x7f8f9c003530}, _M_pod_data = > "05\000\234\217\177\000\000\000\000\000\000\000\000\000"}, _M_manager = > 0x7f8fe173ca16 > <std::_Function_base::_Base_manager<Tufao::HttpFileServer::handler(const > QString&)::__lambda1>::_M_manager(std::_Any_data &, const std::_Any_data > &, std::_Manager_operation)>}, _M_invoker = 0x7f8fe173c9be > <std::_Function_handler<bool(Tufao::HttpServerRequest&, > Tufao::HttpServerResponse&), Tufao::HttpFileServer::handler(const > QString&)::__lambda1>::_M_invoke(const std::_Any_data &, > Tufao::HttpServerRequest &, Tufao::HttpServerResponse &)>}} > __for_range = @0x7f8f9c0013e0: {d = 0x7f8f9c003450} > __for_begin = 0x7f8f9c003498 > __for_end = 0x7f8f9c0034f8 > path = {static null = {<No data fields>}, d = 0xde41c0} > #27 0x00007f8fe175bb87 in Tufao::WorkerThread::run (this=0xae1440) at > /home/zbenjamin/workspace.work/tufao/src/priv/workerthread.cpp:117 > request = {wp = {d = 0x1151eb0, value = 0xc48dd0}} > response = {wp = {d = 0x1064240, value = 0xe9e8a0}} > handled = true > customData = 0x7f8f9c0029a0 > handler = 0x7f8f9c0013c0 > controller = {<QObject> = {_vptr.QObject = 0x7f8fe197ec90 > <vtable for Tufao::WorkerThreadControl+16>, static staticMetaObject = {d > = {superdata = 0x0, stringdata = 0x7f8fe1001520 > <qt_meta_stringdata_QObject>, data = 0x7f8fe1001640 > <qt_meta_data_QObject>, static_metacall = 0x7f8fe0ecbff4 > <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, > relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = > 0x7f8f9c0033d0}, static staticQtMetaObject = {d = {superdata = 0x0, > stringdata = 0x7f8fe104e220 <qt_meta_stringdata_Qt>, data = > 0x7f8fe1057c00 <qt_meta_data_Qt>, static_metacall = 0x0, > relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = > {d = {superdata = 0x7f8fe133df20 <QObject::staticMetaObject>, stringdata > = 0x7f8fe1765be0 <qt_meta_stringdata_Tufao__WorkerThreadControl>, data = > 0x7f8fe1765cc0 <qt_meta_data_Tufao__WorkerThreadControl>, > static_metacall = 0x7f8fe175e550 > <Tufao::WorkerThreadControl::qt_static_metacall(QObject*, > QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = > 0x0}}} > __PRETTY_FUNCTION__ = "virtual void Tufao::WorkerThread::run()" > #28 0x00007f8fe0c99cec in QThreadPrivate::start (arg=0xae1440) at > thread/qthread_unix.cpp:345 > __clframe = {__cancel_routine = 0x7f8fe0c99d80 > <QThreadPrivate::finish(void*)>, __cancel_arg = 0xae1440, __do_it = 1, > __cancel_type = 0} > thr = 0xae1440 > data = 0xae1600 > objectName = {static null = {<No data fields>}, d = > 0x7f8fe0f5bd60 <QArrayData::shared_null>} > #29 0x00007f8fe09e20a2 in start_thread () from /usr/lib/libpthread.so.0 > No symbol table info available. > #30 0x00007f8fdfef7a2d in clone () from /usr/lib/libc.so.6 > No symbol table info available. > > > > In the main backtrace the receiver is accessed, but it belongs to > another thread: > > ------------------------------------ Backtrace MAIN ------------------- > > Thread 1 (Thread 0x7f8fe1b5c740 (LWP 5077)): > #0 0x00007f8fe1002050 in typeinfo name for QObjectPrivate () from > /opt/Qt/5.1.1/lib/libQt5Core.so.5 > No symbol table info available. > #1 0x00007f8fe141cf33 in QAbstractSocketPrivate::canReadNotification > (this=0xd30ab0) at socket/qabstractsocket.cpp:741 > q = 0x11010b0 > rsncrollback = {varRef = @0xd30b88, oldValue = false} > newBytes = 76 > hasData = true > #2 0x00007f8fe1422e66 in QAbstractSocketPrivate::readNotification > (this=0xd30ab0) at socket/qabstractsocket_p.h:77 > No locals. > #3 0x00007f8fe140ece5 in QAbstractSocketEngine::readNotification > (this=0x15a25d0) at socket/qabstractsocketengine.cpp:156 > receiver = 0xd30b80 > #4 0x00007f8fe142b294 in QReadNotifier::event (this=0x15a25f0, > e=0x7fff2d1ecce0) at socket/qnativesocketengine.cpp:1147 > No locals. > #5 0x00007f8fe0e8a18c in QCoreApplicationPrivate::notify_helper > (this=0xad7ae0, receiver=0x15a25f0, event=0x7fff2d1ecce0) at > kernel/qcoreapplication.cpp:984 > No locals. > #6 0x00007f8fe0e89e4e in QCoreApplication::notify (this=0x7fff2d1ed070, > receiver=0x15a25f0, event=0x7fff2d1ecce0) at > kernel/qcoreapplication.cpp:929 > d = 0xad7ae0 > __PRETTY_FUNCTION__ = "virtual bool > QCoreApplication::notify(QObject*, QEvent*)" > #7 0x00007f8fe0e89d56 in QCoreApplication::notifyInternal > (this=0x7fff2d1ed070, receiver=0x15a25f0, event=0x7fff2d1ecce0) at > kernel/qcoreapplication.cpp:867 > threadData = 0xad7ba0 > loopLevelCounter = {threadData = 0xad7ba0} > result = false > cbdata = {0x15a25f0, 0x7fff2d1ecce0, 0x7fff2d1ecc6f} > d = 0xf67e80 > #8 0x00007f8fe0e8d8bb in QCoreApplication::sendEvent > (receiver=0x15a25f0, event=0x7fff2d1ecce0) at > ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:232 > No locals. > #9 0x00007f8fe0ef94b0 in socketNotifierSourceDispatch (source=0xada340) > at kernel/qeventdispatcher_glib.cpp:109 > p = 0x15a24e0 > i = 54 > event = {_vptr.QEvent = 0x7f8fe133ddf0 <vtable for QEvent+16>, > static staticMetaObject = {d = {superdata = 0x0, stringdata = > 0x7f8fe10649a0 <qt_meta_stringdata_QEvent>, data = 0x7f8fe1066320 > <qt_meta_data_QEvent>, static_metacall = 0x0, relatedMetaObjects = 0x0, > extradata = 0x0}}, d = 0x0, t = 50, posted = 0, spont = 0, m_accept = 1, > reserved = 33} > src = 0xada340 > #10 0x00007f8fdeb6cd96 in g_main_context_dispatch () from > /usr/lib/libglib-2.0.so.0 > No symbol table info available. > #11 0x00007f8fdeb6d0e8 in ?? () from /usr/lib/libglib-2.0.so.0 > No symbol table info available. > #12 0x00007f8fdeb6d18c in g_main_context_iteration () from > /usr/lib/libglib-2.0.so.0 > No symbol table info available. > #13 0x00007f8fe0efa163 in QEventDispatcherGlib::processEvents > (this=0xad8df0, flags=...) at kernel/qeventdispatcher_glib.cpp:426 > d = 0xad8e10 > canWait = true > savedFlags = {i = 0} > result = false > #14 0x00007f8fe0e86ab6 in QEventLoop::processEvents > (this=0x7fff2d1ecf80, flags=...) at kernel/qeventloop.cpp:136 > d = 0xb081b0 > #15 0x00007f8fe0e86d99 in QEventLoop::exec (this=0x7fff2d1ecf80, > flags=...) at kernel/qeventloop.cpp:212 > locker = {val = 11369632} > __PRETTY_FUNCTION__ = "int > QEventLoop::exec(QEventLoop::ProcessEventsFlags)" > ref = {d = 0xb081b0, locker = @0x7fff2d1ecf00, exceptionCaught > = true} > app = 0x7fff2d1ed070 > d = 0xb081b0 > #16 0x00007f8fe0e8a432 in QCoreApplication::exec () at > kernel/qcoreapplication.cpp:1120 > threadData = 0xad7ba0 > __PRETTY_FUNCTION__ = "static int QCoreApplication::exec()" > eventLoop = {<QObject> = {_vptr.QObject = 0x7f8fe1341670 > <vtable for QEventLoop+16>, static staticMetaObject = {d = {superdata = > 0x0, stringdata = 0x7f8fe1001520 <qt_meta_stringdata_QObject>, data = > 0x7f8fe1001640 <qt_meta_data_QObject>, static_metacall = 0x7f8fe0ecbff4 > <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, > relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0xb081b0}, > static staticQtMetaObject = {d = {superdata = 0x0, stringdata = > 0x7f8fe104e220 <qt_meta_stringdata_Qt>, data = 0x7f8fe1057c00 > <qt_meta_data_Qt>, static_metacall = 0x0, relatedMetaObjects = 0x0, > extradata = 0x0}}}, static staticMetaObject = {d = {superdata = > 0x7f8fe133df20 <QObject::staticMetaObject>, stringdata = 0x7f8fe10644a0 > <qt_meta_stringdata_QEventLoop>, data = 0x7f8fe1064500 > <qt_meta_data_QEventLoop>, static_metacall = 0x7f8fe0f52aa0 > <QEventLoop::qt_static_metacall(QObject*, QMetaObject::Call, int, > void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}} > returnCode = 32655 > #17 0x00000000004036a4 in main (argc=1, argv=0x7fff2d1ed1e8) at > ../../../src/server/main.cpp:85 > a = {<QObject> = {_vptr.QObject = 0x7f8fe1341750 <vtable for > QCoreApplication+16>, static staticMetaObject = {d = {superdata = 0x0, > stringdata = 0x7f8fe1001520 <qt_meta_stringdata_QObject>, data = > 0x7f8fe1001640 <qt_meta_data_QObject>, static_metacall = 0x7f8fe0ecbff4 > <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, > relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0xad7ae0}, > static staticQtMetaObject = {d = {superdata = 0x0, stringdata = > 0x7f8fe104e220 <qt_meta_stringdata_Qt>, data = 0x7f8fe1057c00 > <qt_meta_data_Qt>, static_metacall = 0x0, relatedMetaObjects = 0x0, > extradata = 0x0}}}, static staticMetaObject = {d = {superdata = > 0x7f8fe133df20 <QObject::staticMetaObject>, stringdata = 0x7f8fe1064620 > <qt_meta_stringdata_QCoreApplication>, data = 0x7f8fe1064840 > <qt_meta_data_QCoreApplication>, static_metacall = 0x7f8fe0f52bf8 > <QCoreApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, > void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, static self = > 0x7fff2d1ed070} > server = {<QObject> = {_vptr.QObject = 0x7f8fe197f190 <vtable > for Tufao::HttpServer+16>, static staticMetaObject = {d = {superdata = > 0x0, stringdata = 0x7f8fe1001520 <qt_meta_stringdata_QObject>, data = > 0x7f8fe1001640 <qt_meta_data_QObject>, static_metacall = 0x7f8fe0ecbff4 > <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, > relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0xadb6e0}, > static staticQtMetaObject = {d = {superdata = 0x0, stringdata = > 0x7f8fe104e220 <qt_meta_stringdata_Qt>, data = 0x7f8fe1057c00 > <qt_meta_data_Qt>, static_metacall = 0x0, relatedMetaObjects = 0x0, > extradata = 0x0}}}, static staticMetaObject = {d = {superdata = > 0x7f8fe133df20 <QObject::staticMetaObject>, stringdata = 0x7f8fe1764b80 > <qt_meta_stringdata_Tufao__HttpServer>, data = 0x7f8fe1764d80 > <qt_meta_data_Tufao__HttpServer>, static_metacall = 0x7f8fe175d06e > <Tufao::HttpServer::qt_static_metacall(QObject*, QMetaObject::Call, int, > void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, priv = 0xadb760} > pServer = {<Tufao::ThreadedHttpRequestDispatcher> = {<QObject> > = {_vptr.QObject = 0x7f8fe197ea50 <vtable for > Tufao::ThreadedHttpPluginServer+16>, static staticMetaObject = {d = > {superdata = 0x0, stringdata = 0x7f8fe1001520 > <qt_meta_stringdata_QObject>, data = 0x7f8fe1001640 > <qt_meta_data_QObject>, static_metacall = 0x7f8fe0ecbff4 > <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, > relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0xadc1f0}, > static staticQtMetaObject = {d = {superdata = 0x0, stringdata = > 0x7f8fe104e220 <qt_meta_stringdata_Qt>, data = 0x7f8fe1057c00 > <qt_meta_data_Qt>, static_metacall = 0x0, relatedMetaObjects = 0x0, > extradata = 0x0}}}, <Tufao::AbstractHttpServerRequestHandler> = > {_vptr.AbstractHttpServerRequestHandler = 0x7f8fe197ead0 <vtable for > Tufao::ThreadedHttpPluginServer+144>}, static staticMetaObject = {d = > {superdata = 0x7f8fe133df20 <QObject::staticMetaObject>, stringdata = > 0x7f8fe1765fa0 > <qt_meta_stringdata_Tufao__ThreadedHttpRequestDispatcher>, data = > 0x7f8fe1766100 <qt_meta_data_Tufao__ThreadedHttpRequestDispatcher>, > static_metacall = 0x7f8fe175ea76 > <Tufao::ThreadedHttpRequestDispatcher::qt_static_metacall(QObject*, > QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = > 0x0}}, priv = 0xadbaa0}, static staticMetaObject = {d = {superdata = > 0x7f8fe197e7a0 <Tufao::ThreadedHttpRequestDispatcher::staticMetaObject>, > stringdata = 0x7f8fe1765ec0 > <qt_meta_stringdata_Tufao__ThreadedHttpPluginServer>, data = > 0x7f8fe1765f40 <qt_meta_data_Tufao__ThreadedHttpPluginServer>, > static_metacall = 0x7f8fe175e912 > <Tufao::ThreadedHttpPluginServer::qt_static_metacall(QObject*, > QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = > 0x0}}} > > > > ------------------------------------------------------------------------------ > > Thats where the problem might be: > > > static gboolean socketNotifierSourceDispatch(GSource *source, > GSourceFunc, gpointer) > { > QEvent event(QEvent::SockAct); > > GSocketNotifierSource *src = reinterpret_cast<GSocketNotifierSource > *>(source); > for (int i = 0; i < src->pollfds.count(); ++i) { > GPollFDWithQSocketNotifier *p = src->pollfds.at(i); > > if ((p->pollfd.revents & p->pollfd.events) != 0) > QCoreApplication::sendEvent(p->socketNotifier, &event); > } > > return true; // ??? don't remove, right? > } > > sendEvent is used, but the receiver is in another thread, shouldn't it > use postEvent? > > I'm on Linux, Qt 5.1.1 gcc > > _______________________________________________ > Development mailing list > Development@qt-project.org > http://lists.qt-project.org/mailman/listinfo/development >
_______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development