[ovs-dev] [threads 21/23] command-line: Make proctitle changing commands thread-safe.

Ben Pfaff blp at nicira.com
Thu Jul 18 23:15:34 UTC 2013


Signed-off-by: Ben Pfaff <blp at nicira.com>
---
 lib/command-line.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/lib/command-line.c b/lib/command-line.c
index 7800c0b..39b26da 100644
--- a/lib/command-line.c
+++ b/lib/command-line.c
@@ -97,6 +97,7 @@ run_command(int argc, char *argv[], const struct command commands[])
 static char *argv_start;       /* Start of command-line arguments in memory. */
 static size_t argv_size;       /* Number of bytes of command-line arguments. */
 static char *saved_proctitle;  /* Saved command-line arguments. */
+static pthread_mutex_t proctitle_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 /* Prepares the process so that proctitle_set() can later succeed.
  *
@@ -154,6 +155,7 @@ proctitle_set(const char *format, ...)
         return;
     }
 
+    xpthread_mutex_lock(&proctitle_mutex);
     if (!saved_proctitle) {
         saved_proctitle = xmemdup(argv_start, argv_size);
     }
@@ -172,17 +174,20 @@ proctitle_set(const char *format, ...)
         memset(&argv_start[n], '\0', argv_size - n);
     }
     va_end(args);
+    xpthread_mutex_unlock(&proctitle_mutex);
 }
 
 /* Restores the process's original command line, as seen by "ps". */
 void
 proctitle_restore(void)
 {
+    xpthread_mutex_lock(&proctitle_mutex);
     if (saved_proctitle) {
         memcpy(argv_start, saved_proctitle, argv_size);
         free(saved_proctitle);
         saved_proctitle = NULL;
     }
+    xpthread_mutex_unlock(&proctitle_mutex);
 }
 #else  /* !LINUX_DATAPATH*/
 /* Stubs that don't do anything on non-Linux systems. */
-- 
1.7.2.5




More information about the dev mailing list