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);  }  | 
