4 * Copyright (c) Intel Corporation.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in
15 * the documentation and/or other materials provided with the
17 * * Neither the name of Intel Corporation nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 #include "spdk/stdinc.h"
36 #include "spdk/event.h"
37 #include "spdk/string.h"
38 #include "spdk/thread.h"
40 struct spdk_app_opts g_opts
= {};
41 static const char g_app_repeat_get_opts_string
[] = "t:";
42 static int g_repeat_times
= 2;
46 app_repeat_usage(void)
48 printf(" -t <num> number of times to repeat calling spdk_app_start/stop\n");
52 app_repeat_parse_arg(int ch
, char *arg
)
56 g_repeat_times
= spdk_strtol(arg
, 0);
57 if (g_repeat_times
< 2) {
68 app_repeat_started(void *arg1
)
70 int index
= *(int *)arg1
;
72 printf("spdk_app_start is called in Round %d.\n", index
);
75 static void _app_repeat_shutdown_cb(void)
77 printf("Shutdown signal received, exit.\n");
82 static void _app_repeat_usr1_handler(int signal
)
84 printf("USR1 signal received, restart spdk application framework.\n");
89 main(int argc
, char **argv
)
94 spdk_app_opts_init(&g_opts
);
95 g_opts
.name
= "app_repeat";
96 g_opts
.shutdown_cb
= _app_repeat_shutdown_cb
;
97 g_opts
.usr1_handler
= _app_repeat_usr1_handler
;
98 if ((rc
= spdk_app_parse_args(argc
, argv
, &g_opts
, g_app_repeat_get_opts_string
,
99 NULL
, app_repeat_parse_arg
, app_repeat_usage
)) !=
100 SPDK_APP_PARSE_ARGS_SUCCESS
) {
104 for (i
= 0; i
< g_repeat_times
; i
++) {
105 rc
= spdk_app_start(&g_opts
, app_repeat_started
, &i
);
109 fprintf(stderr
, "Failed to call spdk_app_start in Round %d.\n", i
);