Index: trunk/Ohana/src/opihi/lib.shell/gprint.c
===================================================================
--- trunk/Ohana/src/opihi/lib.shell/gprint.c	(revision 15030)
+++ trunk/Ohana/src/opihi/lib.shell/gprint.c	(revision 15791)
@@ -126,8 +126,25 @@
 }
 
-void gprintSetFile (gpDest dest, char *filename) {
-
-  gpStream *stream;
-  stream = gprintGetStream (dest);
+void gprintSetFileAllThreads (gpDest dest, char *filename) {
+
+  int i;
+
+  for (i = 0; i < Nstreams; i++) {
+    if (streams[i].dest != dest) continue;
+    gprintSetFile (&streams[i], dest, filename);
+  }
+  return;
+}
+
+void gprintSetFileThisThread (gpDest dest, char *filename) {
+
+  gpStream *stream;
+  stream = gprintGetStream (dest);
+
+  gprintSetFile (stream, dest, filename);
+  return;
+}
+
+void gprintSetFile (gpStream *stream, gpDest dest, char *filename) {
 
   /* if we have an open buffer, free it and null it */
@@ -146,31 +163,33 @@
   }
 skip_close:
-  
-  free (stream[0].name);
+
+  // if NULL, reuse exising stream name
+  if (filename != NULL) {
+    free (stream[0].name);
+    stream[0].name = strcreate (filename);
+  }
 
   /* we allow the user to set stdout to ERR and stderr to LOG if they want */
-  if (!strcmp (filename, "stdout")) {
+  if (!strcmp (stream[0].name, "stdout")) {
     stream[0].file = stdout;
-    stream[0].name = strcreate (filename);
     goto skip_open;
   }
-  if (!strcmp (filename, "stderr")) {
+  if (!strcmp (stream[0].name, "stderr")) {
     stream[0].file = stderr;
-    stream[0].name = strcreate (filename);
     goto skip_open;
   }
   
   /* open the file */
-  stream[0].file = fopen (filename, "a");
+  stream[0].file = fopen (stream[0].name, "a");
   if (stream[0].file == NULL) {
-    fprintf (stderr, "cannot open file %s\n", filename);
+    fprintf (stderr, "cannot open file %s\n", stream[0].name);
+    free (stream[0].name);
     stream[0].file = (dest == GP_LOG) ? stdout : stderr;
     stream[0].name = (dest == GP_LOG) ? strcreate ("stdout") : strcreate("stderr");
-  } else {
-    stream[0].name = strcreate (filename);
   }
 
 skip_open:
   stream[0].mode = GP_FILE;
+  return;
 }
 
