ossi added a comment.

  In D11236#394363 <https://phabricator.kde.org/D11236#394363>, @croick wrote:
  
  > Actually the point I removed does not seem to be true any longer. I'm 
almost certain, that the `prctrl(PR_SET_PTRACER, ...)` was not required until 
some time ago when starting DrKonqi as a fork. But now the internal backtrace 
is not working without. I cannot tell, when that started (currently using 
kernel 4.20).
  
  
  that sounds suspicious. i don't think the kernel's behavior did changed, and 
the process hierarchy presumably didn't, either. the right is handed down the 
ancestry, and that's irrespective of whether the tracer is a "natural" ancestor 
or the tracee, or was set via prctl(). maybe your sysctl settings simply 
changed?

INLINE COMMENTS

> kcrash.cpp:657
>          // Wait forever until the started process exits. This code path is 
> executed
> -        // when launching drkonqi. Note that drkonqi will stop this process 
> in the meantime.
> -        if (directly) {
> -            //if the process was started directly, use waitpid(), as it's a 
> child...
> -            while (waitpid(-1, nullptr, 0) != pid) {}
> -        } else {
> +        // when launching drkonqi. Note that DrKonqi will SIGSTOP this 
> process in the meantime
> +        // and a backtrace will end here.

ok, so now it's claimed to apply to the entire block. but how can that be? 
thepollDrKonqiSocket() couldn't possibly be called then ...

> kcrash.cpp:907
> +        r = poll(&fd, 1, 1000); // wait for 1 second for a request by DrKonqi
> +    } while (r == -1 && (errno == EINTR || errno == EAGAIN));
> +    // only continue if POLLIN event returned

remove eagain here as well.

REPOSITORY
  R285 KCrash

REVISION DETAIL
  https://phabricator.kde.org/D11236

To: croick, #frameworks, ossi
Cc: dfaure, lepagevalleeemmanuel, kde-frameworks-devel, sitter, michaelh, 
ngraham, bruns

Reply via email to