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

Reply via email to