> On Nov. 25, 2015, 8:39 a.m., David Faure wrote: > > src/kdeinit/kinit.cpp, line 1621 > > <https://git.reviewboard.kde.org/r/126161/diff/1/?file=418134#file418134line1621> > > > > Yes if you have to run a separate process which will then dlopen the > > kdeinit module, the whole purpose of kdeinit is moot. You might as well > > simplify your life by getting rid of most of the Q_OS_OSX code in this > > file and simply acting as if the kdeinit module doesn't exist, on Q_OS_OSX. > > > > The existing code to fallback to executing the binary directly will do > > exactly the same as your generic proxy, possibly even faster (no dlopen). > > René J.V. Bertin wrote: > You're undoubtedly right, I considered doing this myself. It would amount > to making the `--no-fork` option the default, no? > > I don't feel comfortable/ready for that right now, without having had a > working equivalent to (the patched) kdeinit4 out there in the wild for > observation. Can we leave your suggestion for a 2nd round of housekeeping and > cleanup? > > David Faure wrote: > Not at all, --no-fork is about kdeinit's own startup, not about the way > it starts other applications. > > In general I don't see much purpose in pushing complex code if we confirm > it to serve no purpose at all. > But I looked a bit further into it, and in fact kinit's launch() does > fork+dlopen or fork+exec, depending on whether the kdeinit module was found. > > So if fork + exec is a problem on OSX, then indeed that needs to be > addressed > But if your patch does fork + exec_helper + dlopen, then that is > unnecessarily complex. > > The simple version of what I have in mind is > http://www.davidfaure.fr/2015/kinit.osx.cpp.diff i.e. never using QLibrary on > OSX. Would that work? > > René J.V. Bertin wrote: > Well, all I can say is that with that patch nothing crashes, `kdeinit5 > --kded` still launches kded5 but as a result I now no longer see something > like (in `ps` output) > > ``` > 12980 1 400c 0 33 0 2510184 6716 - Ss > 0 ?? 0:00.03 /opt/local/bin/kdeinit5 --suicide --nofork > 12981 12980 4004 0 48 0 2641864 14856 - S > 0 ?? 0:00.12 /opt/local/libexec/kde5/kf5/klauncher --fd=9 > libkdeinit5_klauncher > ``` > > but > > ``` > 13211 1 400c 0 33 0 2527592 6724 - Ss > 0 ?? 0:00.02 /opt/local/bin/kdeinit5 --suicide --nofork > 13225 1076 4006 0 31 0 2432948 576 - S+ > 0 ttys004 0:00.00 fgrep kdeinit5 > ``` > > And `kwrapper5 /path/to/kwrite` now longer launches an kwrite process > that can be killed via `killall kwrite` or equivalent. All that is probably > to be expected, but that latter observation does feel like a regression of > sorts to me. > > > BTW, I noticed that kded5 will have to be turned into an agent too, it > has no business showing up in the Dock. > > David Faure wrote: > Yes, killall only works on linux because of the proc_settitle stuff. > > I think my approach would "fix" that "regression" for killall kwrite > because it would be a real fork'ed+exec'ed process. > > You are seeing the drawbacks of the kdeinit mechanism (e.g. killall, and > probably what the `ps` entry looks like for kwrite, too) without benefiting > from its advantages (faster startup), if you have to go through a helper > process. > > René J.V. Bertin wrote: > Erm we have a communications problem here. > > No, with "my" fix, applications started through kwrapper appear as > individual entries in `ps` listings, with your fix only the `kwrapper5 > /path/to/command` entry shows up. > > Also, if your fix does a "real fork + exec", how come it doesn't run > afoul of the limitations imposed on that on OS X? Only because it doesn't > actually load `l` (the result of QLibrary(libpath)), meaning the crash will > return the day kdeinit5 itself does something off-limits? The helper from my > fix is probably much less likely to develop such symptoms. And even if it > does (through Qt) it would be much easier to cure (make it not use Qt at all > but only POSIX APIs). > > Looking at this more closely I do think that my fix could borrow from > yours, and skip the whole `QLibrary l(libpath)` bit (including creating `l`) > because that is being done for nothing. For the rest, using a helper does > seem to give a better "emulation" of what `kdeinit5` does on Linux, no? > > René J.V. Bertin wrote: > With "my" fix: > > ``` > 17906 1 400c 0 33 0 2527592 6744 - Ss > 0 ?? 0:00.02 /opt/local/bin/kdeinit5 --suicide --nofork > 17907 17906 4004 0 33 0 2641356 14844 - S > 0 ?? 0:00.10 /opt/local/libexec/kde5/kf5/klauncher --fd=9 > 505 17925 1096 4006 0 33 0 2491072 5188 - S+ > 0 ttys006 0:00.01 kwrapper5 > /Applications/MacPorts/KDE4/kwrite.app/Contents/MacOS/kwrite > 505 17926 17906 400c 0 48 0 4831548 47552 - S > 0 ?? 0:01.00 > /Applications/MacPorts/KDE4/kwrite.app/Contents/MacOS/kwrite > ```
> The existing code to fallback to exec[...], possibly even faster (no dlopen). That appears to be the case indeed: `kwrapper5 /path/to/kwrite` is faster than `kwrapper5 /path/to/libkdeinit4_kwrite.dylib`. A bit surprising, because someone still has to open that dylib even when exec'ing `kwrite` ... am I missing something? - René J.V. ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://git.reviewboard.kde.org/r/126161/#review88784 ----------------------------------------------------------- On Nov. 26, 2015, 5:20 p.m., René J.V. Bertin wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://git.reviewboard.kde.org/r/126161/ > ----------------------------------------------------------- > > (Updated Nov. 26, 2015, 5:20 p.m.) > > > Review request for KDE Software on Mac OS X and KDE Frameworks. > > > Repository: kinit > > > Description > ------- > > This patch addresses several issues with the OS X adaptations: > > -1 replaces the obsolete Q_OS_MAC with Q_OS_OSX > -2 builds the relevant applications `nongui` instead of as app bundles > -3 turns klauncher into an "agent" by setting `LSUIElement` to true > programmatically > -4 ports a patch that has been in MacPorts' `port:kdelibs4` since October > 14th 2009, which prevents a kdeinit crash that is caused by calling exec > after `fork()` in an application that has used non-POSIX APIs and/or calling > those APIs in the exec'ed application. This patch (originally by MacPorts > developers Jeremy Lainé and Jeremy Lavergne) rearranges call order and uses a > proxy application to do the actual exec. > > > Diffs > ----- > > src/kdeinit/CMakeLists.txt f94db71 > src/kdeinit/kdeinit5_proxy.mm PRE-CREATION > src/kdeinit/kinit.cpp a18008a > src/kdeinit/kinit_mac.mm PRE-CREATION > src/klauncher/CMakeLists.txt 746edfa > src/klauncher/klauncher.h e155f72 > src/klauncher/klauncher.cpp 8b3d343 > src/klauncher/klauncher_main.cpp f69aaa5 > src/start_kdeinit/CMakeLists.txt 46d6cb3 > src/wrapper.cpp 95b7ec2 > > Diff: https://git.reviewboard.kde.org/r/126161/diff/ > > > Testing > ------- > > On OS X 10.9.5 with Qt 5.5.1 and KF5rameworks 5.16.0 . With this patch, > starting `kded5` will launch kdeinit5 and klauncher5 as expected, but > `kdeinit5 --kded` does not yet launch `kded5`. This is probably acceptable > for typical KF5 use on OS X (kded5 can be launched as a login item or as a > LaunchAgent) but I will have another look at why the kded isn't started. > > I am not yet able to perform further testing; practice will for instance have > to show whether point 2 above needs revision (apps that need to be installed > as app bundles). > > Similarly it will have to be seen whether point 3 above has any drawbacks. > Applications running as agents do not show up in the Dock or App Switcher. > Thus, klauncher will not be able to "turn itself into" an application that > does have a full GUI presence with my current modification. I don't know if > that's supposed to be possible though. > NB: I have been building the KDE4 klauncher in a way that makes it impossible > to construct a GUI at all, so I'm not expecting issues in KF5 as long as > klauncher's role hasn't evolved too much. > > > Thanks, > > René J.V. Bertin > >
_______________________________________________ Kde-frameworks-devel mailing list Kde-frameworks-devel@kde.org https://mail.kde.org/mailman/listinfo/kde-frameworks-devel