<div dir="ltr">Ian,<div><br></div><div>I would be very interested in this fix. You say you already did the fix on kdelibs? If you can point me at the commit I can take a look at doing the same on frameworks if you want. Since I can build and test while doing it here.</div><div><br></div><div>thanks,</div><div>Jeremy</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Feb 3, 2015 at 9:31 PM, Ian Wadham <span dir="ltr"><<a href="mailto:iandw.au@gmail.com" target="_blank">iandw.au@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi guys, especially David,<br>
<br>
Yesterday David wrote and I replied:<br>
> I was wondering why klauncher was not in the list, after all it's the one<br>
> writing to that socket, to tell kinit what to do. The answer: because<br>
> klauncher is started by kdeinit forking and passing the file descriptor as<br>
> "command-line" argument (argv). So that explains it ;)<br>
<br>
    "Watch this space… There was a glitch with that "argv" in KDE4 + OSX.  I will<br>
      check if it is still there in Frameworks + OSX."<br>
<br>
Well, yes.  I checked (by reading the code) and the glitch is still there, as far<br>
as I can see.  Specifically, when you run kdeinit5 on OSX, I think you will find<br>
that it blocks in its "int main(int argc, char **argv)" program, at or near line 1782,<br>
where the code says:<br>
<br>
    if (launch_klauncher) {<br>
        start_klauncher();<br>
        handle_requests(d.launcher_pid); // Wait for klauncher to be ready<br>
    }<br>
<br>
In KDE 4 on OS X, kdeinit4 definitely blocks at that point, because KLauncher<br>
never replies on kdeinit4's socket, whose FD number is passed as an argv by<br>
the start_klauncher() procedure.  I tested and verified that back in July-August<br>
last year.  Today I am fairly sure the problem is still there in Frameworks.<br>
<br>
Why no reply from KLauncher?  On OSX (and Windows), KLauncher has the<br>
macro USE_KPROCESS_FOR_KIOSLAVES defined in klauncher.h.  In<br>
klauncher.cpp on Frameworks, that causes QProcess to be used to start<br>
processes.  Nothing wrong with that…<br>
<br>
A side-effect is that code is compiled conditionally which also ignores the FD that<br>
is passed by kdeinit4/5 and fails to store it in its private data.  Consequently there<br>
can be no back-communication from klauncher5 to kdeinit5.<br>
<br>
That might account for a problem Jeremy is having.<br>
<br>
When KLauncher has started successfully, it executes this code, circa line 160<br>
of klauncher.cpp:<br>
<br>
#ifdef USE_KPROCESS_FOR_KIOSLAVES<br>
    qCDebug(KLAUNCHER) << "LAUNCHER_OK";<br>
#else<br>
    klauncher_header request_header;<br>
    request_header.cmd = LAUNCHER_OK;<br>
    request_header.arg_length = 0;<br>
    kde_safe_write(kdeinitSocket, &request_header, sizeof(request_header));<br>
#endif<br>
<br>
Needless to say, it logs a "LAUNCHER_OK" message (on OSX), but fails to<br>
send a reply to kdeinit5 and so kdeinit5 is blocked.  At least, that is certainly<br>
what happens in kdeinit4 and klauncher4 on Apple OS X.<br>
<br>
@David: If you would like a patch for this problem, I can work one out.  It<br>
would preserve the usage of QProcess, but would also pass a reply back<br>
on the socket, so that kdeinit5 can continue with its main() processing.<br>
<br>
I am not sure yet whether the socket would also be needed for "telling<br>
kinit what to do" --- or whether the code using QProcess handles those<br>
kdeinit-style launches.  Ideas welcome.<br>
<br>
Cheers, Ian W.<br>
<br>
P.S. This problem might also affect kdeinit4/5 and friends on Windows.<br>
<br>
_______________________________________________<br>
<a href="mailto:kde-mac@kde.org">kde-mac@kde.org</a><br>
List Information: <a href="https://mail.kde.org/mailman/listinfo/kde-mac
KDE/Mac" target="_blank">https://mail.kde.org/mailman/listinfo/kde-mac<br>
KDE/Mac</a> Information: <a href="http://community.kde.org/Mac" target="_blank">http://community.kde.org/Mac</a><br>
</blockquote></div><br></div>