From: Julian Seward Date: Sun, 2 Sep 2012 14:21:13 +0000 (+0000) Subject: Merge from trunk, revs 12879, 12882, 12883 X-Git-Tag: svn/VALGRIND_3_8_1~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c4e67ae24db82c8eeb9fbb17dab57f5c85488749;p=thirdparty%2Fvalgrind.git Merge from trunk, revs 12879, 12882, 12883 (#301281: valgrind hangs on OS X when the process calls system()) git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_8_BRANCH@12934 --- diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index 66f4984eed..292ed548c3 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -41,7 +41,6 @@ #include "pub_core_debuglog.h" #include "pub_core_debuginfo.h" // VG_(di_notify_*) #include "pub_core_transtab.h" // VG_(discard_translations) -#include "pub_tool_gdbserver.h" // VG_(gdbserver) #include "pub_core_libcbase.h" #include "pub_core_libcassert.h" #include "pub_core_libcfile.h" @@ -2834,14 +2833,11 @@ PRE(posix_spawn) /* Ok. So let's give it a try. */ VG_(debugLog)(1, "syswrap", "Posix_spawn of %s\n", (Char*)ARG2); - // Terminate gdbserver if it is active. - if (VG_(clo_vgdb) != Vg_VgdbNo) { - // If the child will not be traced, we need to terminate gdbserver - // to cleanup the gdbserver resources (e.g. the FIFO files). - // If child will be traced, we also terminate gdbserver: the new - // Valgrind will start a fresh gdbserver after exec. - VG_(gdbserver) (tid); - } + /* posix_spawn on Darwin is combining the fork and exec in one syscall. + So, we should not terminate gdbserver : this is still the parent + running, which will terminate its gdbserver when exiting. + If the child process is traced, it will start a fresh gdbserver + after posix_spawn. */ // Set up the child's exe path. // @@ -2959,7 +2955,9 @@ PRE(posix_spawn) POST(posix_spawn) { vg_assert(SUCCESS); - //POST_MEM_WRITE( ARG1, sizeof(vki_pid_t) ); + if (ARG1 != 0) { + POST_MEM_WRITE( ARG1, sizeof(vki_pid_t) ); + } }