[Bug 260719] Vlc hangs on open file dialog
adawit at kde.org
Sun Jan 23 01:28:34 CET 2011
--- Comment #22 from Dawit Alemayehu <adawit kde org> 2011-01-23 01:28:34 ---
(In reply to comment #21)
> In my opinion, the real problem is that Qt QProcess relies on a signal handler
> to watch for process exit. This is not cooperative... VLC has multiple threads
> in different components, that do create child processes. Yet there can be only
> one signal handler for SIGCHLD at a time and it will catch all process
Yes, the subtle problem with UNIX kernels only providing a non-flexiable signal
mechanism to determine whether a process is still around is well known. You can
> The only portable thread-cooperative mechanism to be notified of the
> termination of a child process terminate is more or less:
> while (waitpid(pid, 0, &status) != pid);
Not really. See Thiago's response to see what they are doing in QProcess
You can find the entire thread I started for this issue here:
> Indeed, this is how VLC's own code waits for child processes.
> Obviously, this would be difficult to integrate with a poll/select main loop.
> Then, something like this would be needed:
> - create a pipe,
> - create a thread (write end of the pipe and child process PID as parameters),
> - register the read end of the pipe to the main loop,
> - thread: call waitpid() from the thread entry,
> - thread: write the process exit status to the pipe,
> - main loop wakes up,
> - read the exit status from the pipe,
> - destroy the pipe and the thread.
> This is admittedly not very straight forward nor very elegant. But I cannot
> think of any simpler yet safe approach.
I know the only simple and elegant solution would be for kernels to provide a
better mechanism for being informed of child process terminations, but wouldn't
the mechanism used in QProcess, as Thiago suggests, a viable solution for you
in VLC ?
Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
More information about the Unassigned-bugs