Applying diff --git a/src/Plugins/Qt/qt_gui.cpp b/src/Plugins/Qt/qt_gui.cpp index 22b21d2cd..5fcb0fb26 100644 --- a/src/Plugins/Qt/qt_gui.cpp +++ b/src/Plugins/Qt/qt_gui.cpp @@ -836,7 +836,10 @@ qt_gui_rep::update () { if (interrupted) needing_update = true; if (nr_windows == 0) qApp->quit();
- time_t delay = delayed_commands.lapse - texmacs_time(); + time_t delay = (0 < N(delayed_commands.q)) + ? (delayed_commands.lapse - texmacs_time()) + : std_delay; + if (needing_update) delay = 0; else delay = max (0, min (std_delay, delay)); if (postpone_treatment) delay= 100; // NOTE: force occasional display seems to produce no problems and solves the bug. (At least the bug that I experienced and debugged. I do not know whether there are more 100% CPU bugs.) I found it with: diff --git a/src/Plugins/Qt/qt_gui.cpp b/src/Plugins/Qt/qt_gui.cpp index 22b21d2cd..b3a0d9102 100644 --- a/src/Plugins/Qt/qt_gui.cpp +++ b/src/Plugins/Qt/qt_gui.cpp @@ -836,10 +836,26 @@ qt_gui_rep::update () { if (interrupted) needing_update = true; if (nr_windows == 0) qApp->quit(); - time_t delay = delayed_commands.lapse - texmacs_time(); + time_t now_1 = texmacs_time(); + time_t lapse = delayed_commands.lapse; + time_t delay = lapse - now_1; + if (needing_update) delay = 0; else delay = max (0, min (std_delay, delay)); if (postpone_treatment) delay= 100; // NOTE: force occasional display + + if( delay <= 0 ) + { + const command_queue& q = delayed_commands; + cout << '\n' + << " now_1: " << now_1 << '\n' + << " lapse - now_1: " << lapse - now_1 << '\n' + << "needing_update: " << needing_update << '\n' + << " delay: " << delay << '\n' + << " q.wait: " << q.wait << '\n' + << " q.lapse: " << q.lapse << '\n' + << " q.start_times: " << q.start_times << LF; + } updatetimer->start (delay); updating = false; When the bug appears, that procudes a lot of now_1: 46233 lapse - now_1: -41 needing_update: false delay: 0 q.wait: false q.lapse: 46192 q.start_times: [ ] where q.lapse and q.start_times stay constant, now_1 increases, and lapse - now_1 decreases. The lapse is used without checking whether the queue is empty. I do not understand command_queue. But if the queue is empty, a lapse (other than +inf) probably does not make sense. _______________________________________________ Texmacs-dev mailing list Texmacs-dev@gnu.org https://lists.gnu.org/mailman/listinfo/texmacs-dev