Il 16/02/2016 10:04, Michael Schnell ha scritto:
a (potential) bug (in "Glib2" whatever this exactly means)
Glib2 means version 2 of GTK Glib, which is used by Qt (and by GTK) to
implement the main event loop.
libglib-2.0.so.0
The full picture (from stack trace) is as follows:
1. The main loop of Lazarus (under Qt WS) calls AppWaitMessage in
qtobject.inc
2. qtobject calls QCoreApplication::processEvents in qcoreapplication_c.cpp
3. qcoreapplication_c.cpp calls QEventDispatcherGlib in libQtGui.so.4
4. QEventDispatcherGlib calls g_main_context_iteration in
libglib-2.0.s0.0 (the Glib2)
5. if g_main_context_iteration has pending messages, it calls
g_main_context_dispatch
6. g_main_context_dispatch calls QCoreApplicationPrivate::sendPostedEvents
When the user code calls Application.ProcessMessages the same sequence
occurs:
AppProcessMessages in QtObjects.inc is called, which then calls
QCoreApplication::processEvents, and all the steps from 2 on are identical.
My feeling is that the bug is sort of this: if the call to
Application.ProcessMessages causes a recursion, and a new different
message has arrived in the meantime, g_main_context_iteration()
understands rightly that there is a pending message to dispatch, but it
decides wrongly to dispatch again the old one, instead of the new one.
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus