Fix hang on a lot of output from a program

Summary:
There is a bug in the Qt glib event loop leading to timers never being
able to deliver signals.

Work around this by disabling the glib event loop.

References:
http://lists.qt-project.org/pipermail/interest/2015-September/018846.html
https://bugreports.qt.io/browse/QTBUG-48344

Test plan:
From the referenced bug:
    Stefan Westerfeld 2010-03-10 11:40:24 UTC
    Running the following program within konsole:

        #include <stdio.h>

        int
        main()
        {
          for (int i = 0; i < 100000000; i++)
            {
              fprintf (stderr, "foo %d\n", i);
            }
        }

    leads to a freeze - not single message is printed - no reaction on
    return. Only after a long time (30 seconds) something happens.

    If I run the same program in an xterm, the messages are scrolling
    through, as I would expect from that kind of output.

Reviewers: #konsole, hindenburg

Reviewed By: #konsole, hindenburg

Subscribers: hindenburg

Tags: #konsole

Differential Revision: https://phabricator.kde.org/D6078

BUG: 230184
This commit is contained in:
Martin T. H. Sandsmark
2017-06-03 19:53:49 +02:00
parent fcea6742c1
commit ac59cc7e00
2 changed files with 23 additions and 0 deletions

View File

@@ -75,6 +75,14 @@ extern "C" int Q_DECL_EXPORT kdemain(int argc, char *argv[])
needToDeleteQApplication = true;
}
#if defined(Q_OS_LINUX)
// Workaround for https://bugreports.qt.io/browse/QTBUG-48344
// See also https://bugs.kde.org/show_bug.cgi?id=230184
// The Qt glib event loop doesn't let timers deliver events if there are a
// lot of other events.
qputenv("QT_NO_GLIB", "1");
#endif
auto app = new QApplication(argc, argv);
// enable high dpi support

15
tests/spam-stderr.c Normal file
View File

@@ -0,0 +1,15 @@
// from https://bugs.kde.org/show_bug.cgi?id=230184
// author Stefan Westerfeld
#include <stdio.h>
int
main()
{
for (int i = 0; i < 100000000; i++)
{
fprintf (stderr, "foo %d\n", i);
}
}