[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-frameworks-devel
Subject: Re: Review Request 126161: OS X housekeeping
From: David Faure <faure () kde ! org>
Date: 2015-11-30 8:01:25
Message-ID: 8196488.3Iv8L1UKSc () asterix
[Download RAW message or body]
On Thursday 26 November 2015 10:27:31 René J.V. Bertin wrote:
> Yes, the *helper* does that, from within the newly exec'ed process. It's weird, but \
> apparently the exact "forbidden" thing is "fork - call/load non-POSIX APIs - exec" \
> while "fork - exec - call/load non-POSIX APIs" works.
That confirms my point. fork+dlopen is forbidden, while fork+exec is OK -- whether \
that means exec kwrite or exec the helper proxy.
> > I don't understand the difference between "execute kwrite" and "execute a proxy \
> > executable that dlopens kwrite".
>
> Maybe the above helps a wee bit?
No it doesn't. It's fork+exec in both cases, both should work.
> Ah. Indeed, we have NOT tried the simple fork+dlopen approach, for some reason \
> (your patch skips the `l.load()` step).
Don't, it's the thing that kdeinit was doing initially (since it's what it does on \
linux, whenever possible, i.e. when a .so is found) and which created problems on \
OSX.
> What's the difference between starting kwrite directly on the commandline (or \
> through execve()), and dlopen'ing it?
On Linux: it skips the cost of relocations which happen when starting a new binary. \
kdeinit already links to the major shared libraries, so it's faster to fork and \
dlopen.
On OSX: it falls into the forbidden case.
> ... if kdeinit5 and/or kwrapper5 are supposed to be able to launch() shared \
> libraries containing kdeinitmain or kdemain.
You seem to be missing one point: every application which provides a .so ("kdeinit \
module") *also* provides a binary, always. The kdeinit module is only an \
optimization. Every app needs to have a standard executable, for other means of \
starting it. The entry point into kdeinit is "start kwrite please". kdeinit decides \
whether to do that using the kdeinit module (.so) or the executable. So it's \
perfectly fine to only support executables. That's also what happens on Windows. I \
never realized you could pass a shared lib to kwrapper5, that is definitely not the \
intended usage, and I can tell you, nobody does this ;)
> 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?
Yes but I bet it means some symbol lookups happen at runtime rather than at link \
time. I'm not enough of a lowlevel mac toolchain expert to give a fully satisfying \
explanation, but I'm not very surprised.
--
David Faure, faure@kde.org, http://www.davidfaure.fr
Working on KDE Frameworks 5
_______________________________________________
Kde-frameworks-devel mailing list
Kde-frameworks-devel@kde.org
https://mail.kde.org/mailman/listinfo/kde-frameworks-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic