Hey Thiago, Am Freitag, 4. März 2022, 18:35:23 CET schrieb Thiago Macieira: > And this is the reason why you got the symptom of QProcess breaking. We'd > have expected that the eight mention be the same as the fifth, to keep the > pattern going, but it isn't. It's the same as the second and sixth > mentions. The SIGCHLD handler that ran is that stupidly short one, which we > now know to be definitely buggy.
Thanks a lot for the comprehensive analysis! I don't grasp this compleley -- or, to be honest, not at all ... most likely, one has to be a real programmer to do so ;-) But it's definitely quite impressive how you can read this from the trace! But this: Am Freitag, 4. März 2022, 18:02:37 CET schrieb Thiago Macieira: > So the question is why this brscan didn't even attempt to use pidfd. There's > some code in Qt5's QProcess to attempt to detect whether you've subclassed > QProcess and skip using the pidfd feature: > > if (typeid(*q) != typeid(QProcess)) > ffdflags |= FFD_USE_FORK; > > https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io/qprocess_unix.cpp? > h=5.15#n462 made me try one thing: I used a small helper class subclassing QProcess to execute the external commands. It did not much, just took a command line like you would type it in a shell, along with the in and out file, extracted the program parameter from it and assembled the arguments QStringList. And then ran QProcess::start and checked if the start succeeded, and catched STDERR if the program would not exit with 0. I simply made this a QObject subclass and rather then using start() etc. directly, I created a QProcess object and did the same stuff with this one. No freezes anymore. No matter what scanner I use. I never thought subclassing the QProcess would change the behavior in such a radical way :-O Is there some passage in the docs that says "Never ever subclass a QProcess unless you exactly know what you are doing, otherwise, you will experience the weirdest problems"? :-D I would never have figured this out. Thank you very very much for having a look at this and pointing me in the right direction. Cheers, Tobias