================
@@ -5681,7 +5685,10 @@ void ProcessGDBRemote::DidVForkDone() {
void ProcessGDBRemote::DidExec() {
// If we are following children, vfork is finished by exec (rather than
// vforkdone that is submitted for parent).
- if (GetFollowForkMode() == eFollowChild)
- m_vfork_in_progress = false;
+ if (GetFollowForkMode() == eFollowChild) {
+ assert(m_vfork_in_progress_count > 0);
+ if (m_vfork_in_progress_count > 0)
+ --m_vfork_in_progress_count;
----------------
clayborg wrote:
We need to verify this is needed here. Usually someone does a `fork()` or
`vfork()` and then they do an `exec*()` call (there are many different flavors
of exec:
```
int execl(const char *path, const char *arg0, ..., /*, (char *)0, */);
int execle(const char *path, const char *arg0, ..., /* (char *)0 char *const
envp[] */);
int execlp(const char *file, const char *arg0, ..., /*, (char *)0, */);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvP(const char *file, const char *search_path, char *const argv[]);
```
So we need to verify in our test case that if we do a `fork() + exec*()` or
`vfork() + exec*()` call that we don't run both
`ProcessGDBRemote::DidVForkDone()` _and_ `ProcessGDBRemote::DidExec()` because
if we do this assertion will fire.
https://github.com/llvm/llvm-project/pull/81564
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits