Index: trunk/Ohana/src/opihi/lib.shell/BufferOps.c
===================================================================
--- trunk/Ohana/src/opihi/lib.shell/BufferOps.c	(revision 16438)
+++ trunk/Ohana/src/opihi/lib.shell/BufferOps.c	(revision 16886)
@@ -4,4 +4,7 @@
 static int     Nbuffers;
 
+static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+
+// this function is NOT thread protected : it is only used in startup and/or shutdown
 void InitBuffers () {
   Nbuffers = 0;
@@ -9,4 +12,5 @@
 }
 
+// this function is NOT thread protected : it is only used in startup and/or shutdown
 void FreeBuffers () {
 
@@ -66,8 +70,11 @@
   if (i == Nbuffers) { 
     if (mode == OLDBUFFER) goto error;
-    Nbuffers += 1;
+    // lock to protect static array
+    pthread_mutex_lock (&mutex);
+    Nbuffers ++;
     REALLOCATE (buffers, Buffer *, Nbuffers);
     buffers[i] = InitBuffer ();
     strcpy (buffers[i][0].name, name);
+    pthread_mutex_unlock (&mutex);
     return (buffers[i]);
   } 
@@ -154,9 +161,11 @@
     return (TRUE);
   }
-
   free (in);
+
+  pthread_mutex_lock (&mutex);
   for (j = i; j < Nbuffers - 1; j++) buffers[j] = buffers[j + 1];
-  Nbuffers -= 1;
+  Nbuffers --;
   REALLOCATE (buffers, Buffer *, MAX (Nbuffers, 1));
+  pthread_mutex_unlock (&mutex);
   return (TRUE);
 }
@@ -175,8 +184,9 @@
   free (buffers[i]);
 
+  pthread_mutex_lock (&mutex);
   for (j = i; j < Nbuffers - 1; j++) buffers[j] = buffers[j + 1];
-
-  Nbuffers -= 1;
+  Nbuffers --;
   REALLOCATE (buffers, Buffer *, MAX (Nbuffers, 1));
+  pthread_mutex_unlock (&mutex);
   return (TRUE);
 }
@@ -195,8 +205,9 @@
   free (buffers[i]);
 
+  pthread_mutex_lock (&mutex);
   for (j = i; j < Nbuffers - 1; j++) buffers[j] = buffers[j + 1];
-
-  Nbuffers -= 1;
+  Nbuffers --;
   REALLOCATE (buffers, Buffer *, MAX (Nbuffers, 1));
+  pthread_mutex_unlock (&mutex);
   return (TRUE);
 }
