From c42a19d5e3a8236af3b727cd708bac22a8608b9d Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Thu, 12 May 2005 17:50:33 +0000 Subject: [PATCH] re PR libfortran/21324 (#undef GFC_CLEAR_MEMORY causes testsuite failures) 2005-05-12 Thomas Koenig PR libfortran/21324 * runtime/memory.c: Don't define GFC_CLEAR_MEMORY (it's a performance hog). * io/open.c (new_unit): Zero freshly allocated memory for unit structure. * io/unit.c (init_units): Zero freshly allocated memory for STDIN, STDOUT and STDERR. * io/unix.c (open_internal): Zero freshly allocated memory for unix_stream. (fd_to_stream): Likewise. From-SVN: r99619 --- libgfortran/ChangeLog | 13 +++++++++++++ libgfortran/io/open.c | 1 + libgfortran/io/unit.c | 3 +++ libgfortran/io/unix.c | 2 ++ libgfortran/runtime/memory.c | 2 +- 5 files changed, 20 insertions(+), 1 deletion(-) diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index eded92ede0b..353ac9a02c4 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,16 @@ +2005-05-12 Thomas Koenig + + PR libfortran/21324 + * runtime/memory.c: Don't define GFC_CLEAR_MEMORY (it's a + performance hog). + * io/open.c (new_unit): Zero freshly allocated memory for + unit structure. + * io/unit.c (init_units): Zero freshly allocated memory for + STDIN, STDOUT and STDERR. + * io/unix.c (open_internal): Zero freshly allocated memory + for unix_stream. + (fd_to_stream): Likewise. + 2005-05-11 Bud Davis PR fortran/19478 diff --git a/libgfortran/io/open.c b/libgfortran/io/open.c index 97bf6e4cc3d..f579f1f5b3c 100644 --- a/libgfortran/io/open.c +++ b/libgfortran/io/open.c @@ -351,6 +351,7 @@ new_unit (unit_flags * flags) /* Create the unit structure. */ u = get_mem (sizeof (gfc_unit) + ioparm.file_len); + memset (u, '\0', sizeof (gfc_unit) + ioparm.file_len); u->unit_number = ioparm.unit; u->s = s; diff --git a/libgfortran/io/unit.c b/libgfortran/io/unit.c index ae0771f0816..f0d8dbe205f 100644 --- a/libgfortran/io/unit.c +++ b/libgfortran/io/unit.c @@ -295,6 +295,7 @@ init_units (void) if (options.stdin_unit >= 0) { /* STDIN */ u = get_mem (sizeof (gfc_unit)); + memset (u, '\0', sizeof (gfc_unit)); u->unit_number = options.stdin_unit; u->s = input_stream (); @@ -316,6 +317,7 @@ init_units (void) if (options.stdout_unit >= 0) { /* STDOUT */ u = get_mem (sizeof (gfc_unit)); + memset (u, '\0', sizeof (gfc_unit)); u->unit_number = options.stdout_unit; u->s = output_stream (); @@ -337,6 +339,7 @@ init_units (void) if (options.stderr_unit >= 0) { /* STDERR */ u = get_mem (sizeof (gfc_unit)); + memset (u, '\0', sizeof (gfc_unit)); u->unit_number = options.stderr_unit; u->s = error_stream (); diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index 92eea53ee5b..2d8286ce047 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -872,6 +872,7 @@ open_internal (char *base, int length) unix_stream *s; s = get_mem (sizeof (unix_stream)); + memset (s, '\0', sizeof (unix_stream)); s->buffer = base; s->buffer_offset = 0; @@ -900,6 +901,7 @@ fd_to_stream (int fd, int prot, int avoid_mmap) unix_stream *s; s = get_mem (sizeof (unix_stream)); + memset (s, '\0', sizeof (unix_stream)); s->fd = fd; s->buffer_offset = 0; diff --git a/libgfortran/runtime/memory.c b/libgfortran/runtime/memory.c index 8b8dca89afd..ce2dc91c797 100644 --- a/libgfortran/runtime/memory.c +++ b/libgfortran/runtime/memory.c @@ -36,7 +36,7 @@ Boston, MA 02111-1307, USA. */ return memory that is guaranteed to be set to zero. This can have a severe efficiency penalty, so it should never be set if good performance is desired, but it can help when you're debugging code. */ -#define GFC_CLEAR_MEMORY +/* #define GFC_CLEAR_MEMORY */ /* If GFC_CHECK_MEMORY is defined, we do some sanity checks at runtime. This causes small overhead, but again, it also helps debugging. */