Hi. I have one application on Mac with one line like the following:
result = QProcess::execute("/sbin/umount", QStringList() << m_mountedPath); That stopped working one day, and I could not figure out why. The process is executed and runs successfully (I can see it unmounts), but it never returns to the caller. I thought it was something I changed elsewhere, but no. After recompiling with 5.5.0 (upgrading from 5.4.2) it worked again... partially (explained below). I think now that it stopped working when I upgraded to 5.4.2 from 5.4.1. This works perfectly fine in a test case that just calls execute(), so I think the issue is that I'm using the FUSE library. That library calls fork and exec, and at some point sets up SIGCHLD in a way that probably prevents QProcess from working well (it uses signal instead of sigaction), even if I use it in a different thread. That's the part that works partially as wanted with 5.5.0. I call fuse_mount (which is the one I suspect it breaks something) at application startup, and the first call to QProces::execute() works. If I call fuse_mount again, the second call to execute() works, but never returns to the caller. So, is this a QProcess limitation or a bug? I see the behaviour change across versions. Might be that the other library is doing something plain unnacceptable for QProcess? I tried replacing QProces::execute() with ::system() and it works as expected, though. Thank you. PD: And thank you Thiago for your blog posts about forkfd. Reading that probably was the key that made me figure out what might be wrong with my app. Otherwise I would still be hitting my head against the desk. :) -- Alex (a.k.a. suy) | GPG ID 0x0B8B0BC2 http://barnacity.net/ | http://disperso.net _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest