Ejemplo n.º 1
0
static void
test_thread_stop_unused (void)
{
   GThreadPool *pool;
   guint i;
   guint limit = 100;

   /* Spawn a few threads. */
   g_thread_pool_set_max_unused_threads (-1);
   pool = g_thread_pool_new ((GFunc) g_usleep, NULL, -1, FALSE, NULL);

   for (i = 0; i < limit; i++)
     g_thread_pool_push (pool, GUINT_TO_POINTER (1000), NULL);

   DEBUG_MSG (("[unused] ===> pushed %d threads onto the idle pool",
	       limit));

   /* Wait for the threads to migrate. */
   g_usleep (G_USEC_PER_SEC);

   DEBUG_MSG (("[unused] current threads %d",
	       test_count_threads()));

   DEBUG_MSG (("[unused] stopping unused threads"));
   g_thread_pool_stop_unused_threads ();

   for (i = 0; i < 5; i++)
     {
       if (g_thread_pool_get_num_unused_threads () == 0 &&
           test_count_threads () == 0)
         break;

       DEBUG_MSG (("[unused] waiting ONE second for threads to die"));

       /* Some time for threads to die. */
       g_usleep (G_USEC_PER_SEC);
     }

   DEBUG_MSG (("[unused] stopped idle threads, %d remain, %d threads still exist",
	       g_thread_pool_get_num_unused_threads (),
	       test_count_threads ()));

   g_assert (g_thread_pool_get_num_unused_threads () == test_count_threads ());
   g_assert (g_thread_pool_get_num_unused_threads () == 0);

   g_thread_pool_set_max_unused_threads (MAX_THREADS);

   DEBUG_MSG (("[unused] cleaning up thread pool"));
   g_thread_pool_free (pool, FALSE, TRUE);
}
static void
test_thread_functions (void)
{
  gint max_unused_threads;
  guint max_idle_time;

  /* This function attempts to call functions which don't need a
   * threadpool to operate to make sure no uninitialised pointers
   * accessed and no errors occur.
   */

  max_unused_threads = 3;

  DEBUG_MSG (("[funcs] Setting max unused threads to %d", 
	      max_unused_threads));
  g_thread_pool_set_max_unused_threads (max_unused_threads);

  DEBUG_MSG (("[funcs] Getting max unused threads = %d", 
	     g_thread_pool_get_max_unused_threads ()));
  g_assert (g_thread_pool_get_max_unused_threads() == max_unused_threads);

  DEBUG_MSG (("[funcs] Getting num unused threads = %d", 
	     g_thread_pool_get_num_unused_threads ()));
  g_assert (g_thread_pool_get_num_unused_threads () == 0);

  DEBUG_MSG (("[funcs] Stopping unused threads"));
  g_thread_pool_stop_unused_threads ();

  max_idle_time = 10 * G_USEC_PER_SEC;

  DEBUG_MSG (("[funcs] Setting max idle time to %d", 
	      max_idle_time));
  g_thread_pool_set_max_idle_time (max_idle_time);

  DEBUG_MSG (("[funcs] Getting max idle time = %d", 
	     g_thread_pool_get_max_idle_time ()));
  g_assert (g_thread_pool_get_max_idle_time () == max_idle_time);

  DEBUG_MSG (("[funcs] Setting max idle time to 0"));
  g_thread_pool_set_max_idle_time (0);

  DEBUG_MSG (("[funcs] Getting max idle time = %d", 
	     g_thread_pool_get_max_idle_time ()));
  g_assert (g_thread_pool_get_max_idle_time () == 0);
}
Ejemplo n.º 3
0
Archivo: authsrv.c Proyecto: regit/nufw
/**
 * Stop all nuauth thread pools
 * If soft is true, destroy pools.
 */
void stop_all_thread_pools(gboolean soft)
{
	/* end logging threads */
	if (soft) {
		stop_thread_pool("session logger", &nuauthdatas->user_session_loggers);
		stop_thread_pool("packet logger", &nuauthdatas->user_loggers);
		stop_thread_pool("acl checker", &nuauthdatas->acl_checkers);
		stop_thread_pool("users workers", &nuauthdatas->user_workers);

		if (nuauthconf->log_users_sync) {
			stop_thread_pool("decision worker",
					&nuauthdatas->decisions_workers);
		}

		if (nuauthconf->do_ip_authentication) {
			stop_thread_pool("ip auth worker",
					&nuauthdatas->ip_authentication_workers);
		}
	}
	g_thread_pool_stop_unused_threads();
}
Ejemplo n.º 4
0
static gboolean
purge_useless_threads (gpointer data)
{
	g_thread_pool_stop_unused_threads ();
	return TRUE;
}