- This allows testing independently the modes with/without threading

Signed-off-by: Dwight Engen <dwight.en...@oracle.com>
---
 src/tests/concurrent.c | 34 +++++++++++++++++++++++++---------
 1 file changed, 25 insertions(+), 9 deletions(-)

diff --git a/src/tests/concurrent.c b/src/tests/concurrent.c
index 16e93d6..76fae87 100644
--- a/src/tests/concurrent.c
+++ b/src/tests/concurrent.c
@@ -36,6 +36,7 @@ static struct option options[] = {
     { "iterations",  required_argument, NULL, 'i' },
     { "template",    required_argument, NULL, 't' },
     { "delay",       required_argument, NULL, 'd' },
+    { "modes",       required_argument, NULL, 'm' },
     { "quiet",       no_argument,       NULL, 'q' },
     { "help",        no_argument,       NULL, '?' },
     { 0, 0, 0, 0 },
@@ -44,13 +45,14 @@ static struct option options[] = {
 static void usage(void) {
     fprintf(stderr, "Usage: lxc-test-concurrent [OPTION]...\n\n"
         "Common options :\n"
-        "  -j, --threads=N      Threads to run concurrently\n"
-        "                       (default: 5, use 1 for no threading)\n"
-        "  -i, --iterations=N   Number times to run the test (default: 1)\n"
-        "  -t, --template=t     Template to use (default: busybox)\n"
-        "  -d, --delay=N        Delay in seconds between start and stop\n"
-        "  -q, --quiet          Don't produce any output\n"
-        "  -?, --help           Give this help list\n"
+        "  -j, --threads=N              Threads to run concurrently\n"
+        "                               (default: 5, use 1 for no threading)\n"
+        "  -i, --iterations=N           Number times to run the test (default: 
1)\n"
+        "  -t, --template=t             Template to use (default: busybox)\n"
+        "  -d, --delay=N                Delay in seconds between start and 
stop\n"
+        "  -m, --modes=<mode,mode,...>  Modes to run (create, start, stop, 
destroy)\n"
+        "  -q, --quiet                  Don't produce any output\n"
+        "  -?, --help                   Give this help list\n"
         "\n"
         "Mandatory or optional arguments to long options are also mandatory or 
optional\n"
         "for any corresponding short options.\n\n");
@@ -135,11 +137,12 @@ int main(int argc, char *argv[]) {
     pthread_t *threads;
     struct thread_args *args;
 
-    char *modes[] = {"create", "start", "stop", "destroy", NULL};
+    char *modes_default[] = {"create", "start", "stop", "destroy", NULL};
+    char **modes = modes_default;
 
     pthread_attr_init(&attr);
 
-    while ((opt = getopt_long(argc, argv, "j:i:t:d:q", options, NULL)) != -1) {
+    while ((opt = getopt_long(argc, argv, "j:i:t:d:m:q", options, NULL)) != 
-1) {
         switch(opt) {
         case 'j':
             nthreads = atoi(optarg);
@@ -156,6 +159,19 @@ int main(int argc, char *argv[]) {
         case 'q':
             quiet = 1;
             break;
+        case 'm': {
+            char *mode_tok, *tok, *saveptr;
+
+            modes = NULL;
+            for (i = 0, mode_tok = optarg;
+                 (tok = strtok_r(mode_tok, ",", &saveptr));
+                i++, mode_tok = NULL) {
+                modes = realloc(modes, sizeof(*modes) * (i+2));
+                modes[i] = tok;
+           }
+            modes[i] = NULL;
+            break;
+       }
         default: /* '?' */
             usage();
             exit(EXIT_FAILURE);
-- 
1.8.3.1


------------------------------------------------------------------------------
November Webinars for C, C++, Fortran Developers
Accelerate application performance with scalable programming models. Explore
techniques for threading, error checking, porting, and tuning. Get the most 
from the latest Intel processors and coprocessors. See abstracts and register
http://pubads.g.doubleclick.net/gampad/clk?id=60136231&iu=/4140/ostg.clktrk
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to