diff --git a/Reconstruction/RecAlgs/src/MemoryAlg.cxx b/Reconstruction/RecAlgs/src/MemoryAlg.cxx
index 0fa0062806382ff3fc1e718d954a3f9e0d635b1d..864f073f80ddf27f334017bdf1efffab648c9024 100755
--- a/Reconstruction/RecAlgs/src/MemoryAlg.cxx
+++ b/Reconstruction/RecAlgs/src/MemoryAlg.cxx
@@ -69,8 +69,7 @@ StatusCode MemoryAlg::execute()
   
   char buffer[2048] = {0};
   int out_pipe[2];
-  int saved_stderr;
-  saved_stderr = dup (STDERR_FILENO);
+  int saved_stderr = dup (STDERR_FILENO);
   pipe (out_pipe);
   dup2 (out_pipe[1], STDERR_FILENO);
   close (out_pipe[1]);
@@ -80,11 +79,14 @@ StatusCode MemoryAlg::execute()
   int len = read (out_pipe[0], buffer, 2047);
   if (len >= 0)
     buffer[len] = '\0'; // Redundant, but keeps coverity happy.
+  else
+    buffer[0] = '\0';
   // close (STDERR_FILENO);
-  if (saved_stderr >= 0)
+  if (saved_stderr >= 0) {
     dup2 (saved_stderr, STDERR_FILENO);
+    close (saved_stderr);
+  }
   close (out_pipe[0]);
-  close (saved_stderr);
   
   ATH_MSG_DEBUG("ROLF " << buffer);