diff options
Diffstat (limited to 'tests/lib/test_heavy_thread.c')
| -rw-r--r-- | tests/lib/test_heavy_thread.c | 156 |
1 files changed, 73 insertions, 83 deletions
diff --git a/tests/lib/test_heavy_thread.c b/tests/lib/test_heavy_thread.c index c43fa76c0e..e7af8dccc5 100644 --- a/tests/lib/test_heavy_thread.c +++ b/tests/lib/test_heavy_thread.c @@ -41,65 +41,59 @@ extern struct thread_master *master; -enum -{ - ITERS_FIRST = 0, - ITERS_ERR = 100, - ITERS_LATER = 400, - ITERS_PRINT = 10, - ITERS_MAX = 1000, +enum { ITERS_FIRST = 0, + ITERS_ERR = 100, + ITERS_LATER = 400, + ITERS_PRINT = 10, + ITERS_MAX = 1000, }; struct work_state { - struct vty *vty; - char *str; - int i; + struct vty *vty; + char *str; + int i; }; -static void -slow_func (struct vty *vty, const char *str, const int i) +static void slow_func(struct vty *vty, const char *str, const int i) { - double x = 1; - int j; - - for (j = 0; j < 300; j++) - x += sin(x)*j; - - if ((i % ITERS_LATER) == 0) - printf ("%s: %d, temporary error, save this somehow and do it later..\n", - __func__, i); - - if ((i % ITERS_ERR) == 0) - printf ("%s: hard error\n", __func__); - - if ((i % ITERS_PRINT) == 0) - printf ("%s did %d, x = %g\n", str, i, x); + double x = 1; + int j; + + for (j = 0; j < 300; j++) + x += sin(x) * j; + + if ((i % ITERS_LATER) == 0) + printf("%s: %d, temporary error, save this somehow and do it later..\n", + __func__, i); + + if ((i % ITERS_ERR) == 0) + printf("%s: hard error\n", __func__); + + if ((i % ITERS_PRINT) == 0) + printf("%s did %d, x = %g\n", str, i, x); } -static int -clear_something (struct thread *thread) +static int clear_something(struct thread *thread) { - struct work_state *ws = THREAD_ARG(thread); - - /* this could be like iterating through 150k of route_table - * or worse, iterating through a list of peers, to bgp_stop them with - * each having 150k route tables to process... - */ - while (ws->i < ITERS_MAX) - { - slow_func(ws->vty, ws->str, ws->i); - ws->i++; - if (thread_should_yield(thread)) - { - thread_add_background(master, clear_something, ws, 0); - return 0; - } - } - - /* All done! */ - XFREE (MTYPE_TMP, ws->str); - XFREE (MTYPE_TMP, ws); - return 0; + struct work_state *ws = THREAD_ARG(thread); + + /* this could be like iterating through 150k of route_table + * or worse, iterating through a list of peers, to bgp_stop them with + * each having 150k route tables to process... + */ + while (ws->i < ITERS_MAX) { + slow_func(ws->vty, ws->str, ws->i); + ws->i++; + if (thread_should_yield(thread)) { + thread_add_background(master, clear_something, ws, 0); + return 0; + } + } + + /* All done! */ + XFREE(MTYPE_TMP, ws->str); + XFREE(MTYPE_TMP, ws); + return 0; } DEFUN (clear_foo, @@ -108,40 +102,36 @@ DEFUN (clear_foo, "clear command\n" "arbitrary string\n") { - char *str; - struct work_state *ws; - - if (!argc) - { - vty_out (vty, "%% string argument required%s", VTY_NEWLINE); - return CMD_WARNING; - } - - str = argv_concat (argv, argc, 0); - - if ((ws = XMALLOC(MTYPE_TMP, sizeof(*ws))) == NULL) - { - zlog_err ("%s: unable to allocate work_state", __func__); - return CMD_WARNING; - } - - if (!(ws->str = XSTRDUP (MTYPE_TMP, str))) - { - zlog_err ("%s: unable to xstrdup", __func__); - XFREE (MTYPE_TMP, ws); - return CMD_WARNING; - } - - ws->vty = vty; - ws->i = ITERS_FIRST; - - thread_add_background(master, clear_something, ws, 0); - - return CMD_SUCCESS; + char *str; + struct work_state *ws; + + if (!argc) { + vty_out(vty, "%% string argument required%s", VTY_NEWLINE); + return CMD_WARNING; + } + + str = argv_concat(argv, argc, 0); + + if ((ws = XMALLOC(MTYPE_TMP, sizeof(*ws))) == NULL) { + zlog_err("%s: unable to allocate work_state", __func__); + return CMD_WARNING; + } + + if (!(ws->str = XSTRDUP(MTYPE_TMP, str))) { + zlog_err("%s: unable to xstrdup", __func__); + XFREE(MTYPE_TMP, ws); + return CMD_WARNING; + } + + ws->vty = vty; + ws->i = ITERS_FIRST; + + thread_add_background(master, clear_something, ws, 0); + + return CMD_SUCCESS; } -void -test_init() +void test_init() { - install_element (VIEW_NODE, &clear_foo_cmd); + install_element(VIEW_NODE, &clear_foo_cmd); } |
