From: Philippe Waroquiers Date: Tue, 28 Feb 2012 22:37:44 +0000 (+0000) Subject: After a fork, gdbserver_init can be called again. X-Git-Tag: svn/VALGRIND_3_8_0~443 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0eb5c19d3f4f3c8ac0b59ceb9889510ac6ed1695;p=thirdparty%2Fvalgrind.git After a fork, gdbserver_init can be called again. Buffers should not be re-allocated in such a case. (memory leak detected by running memcheck on memcheck) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12410 --- diff --git a/coregrind/m_gdbserver/server.c b/coregrind/m_gdbserver/server.c index 9d2467fba8..84a2e1b290 100644 --- a/coregrind/m_gdbserver/server.c +++ b/coregrind/m_gdbserver/server.c @@ -719,8 +719,12 @@ void gdbserver_init (void) dlog(1, "gdbserver_init gdbserver embedded in valgrind: %s\n", version); noack_mode = False; initialize_low (); - own_buf = malloc (PBUFSIZ); - mem_buf = malloc (PBUFSIZ); + // After a fork, gdbserver_init can be called again. + // We do not have to re-malloc the buffers in such a case. + if (own_buf == NULL) + own_buf = malloc (PBUFSIZ); + if (mem_buf == NULL) + mem_buf = malloc (PBUFSIZ); } void gdbserver_terminate (void) diff --git a/coregrind/m_gdbserver/target.c b/coregrind/m_gdbserver/target.c index ae61c94c6a..c72c761bf3 100644 --- a/coregrind/m_gdbserver/target.c +++ b/coregrind/m_gdbserver/target.c @@ -91,7 +91,9 @@ int write_inferior_memory (CORE_ADDR memaddr, const unsigned char *myaddr, void set_target_ops (struct target_ops *target) { - the_target = (struct target_ops *) malloc (sizeof (*the_target)); + // Can be called again after a fork => do not re-malloc the_target. + if (the_target == NULL) + the_target = (struct target_ops *) malloc (sizeof (*the_target)); VG_(memcpy) (the_target, target, sizeof (*the_target)); }