labath added inline comments.
================ Comment at: lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.cpp:723 // Process all pending waitpid notifications. - int status; - ::pid_t wait_pid = - llvm::sys::RetryAfterSignal(-1, waitpid, GetID(), &status, WNOHANG); + while (true) { + int status; ---------------- mgorny wrote: > labath wrote: > > Is the loop still necessary? > I am not sure but I think there's no harm in keeping it, and it might save us > from some hard-to-debug corner conditions in the future. I don't mind that much, though I would be surprised if this can help with anything. IIUC, the BSD kernel always sends one notification when the process stops, and I believe this code is written in a way which expects that (only linux has special code to delay some actions until every thread registers as stopped). If, for whatever reason, we end up getting two notifications here, I expect things would blow up spectacularly... ================ Comment at: lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.cpp:981-987 + switch (event) { + case PL_FLAG_FORKED: + case PL_FLAG_FORKED | PL_FLAG_VFORKED: + break; + default: + assert(false && "unknown clone_info.event"); + } ---------------- mgorny wrote: > labath wrote: > > `assert(event&PL_FLAG_FORKED)` would be shorter, but I am not sure if we > > need even that, as this is already checked in the caller. You could just > > drop the entire `event` argument, if it is unused.. > The distinction is necessary to know how to deal with software breakpoints, > and it will be used in the followup patch (D99864, when I extend it to > non-Linux targets). I think removing `event` at this point to reintroduce it > would be a wasted effort. > > That said, I guess this is yet another case for `llvm_unreachable()`. Also, I > think it's worth keeping `assert()`s like this as they make sure we don't > break stuff accidentally when changing code on the caller's end. True, but it's even better when the code is written such that the asserts/unreachables are unnecessary. One way to do that might be to do the decoding in the caller: ``` if (info.pl_flags & PL_FLAG_FORKED) { MonitorClone(info.pl_child_pid, /*bool is_vfork*/ fork_flags & PL_FLAG_VFORKED); return; } ``` It's hard to say whether that would work without seeing the real implementation. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D98822/new/ https://reviews.llvm.org/D98822 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits