Exemplo n.º 1
0
thread_attr_t thread_attr_new()
{
  thread_attr_t attr = (thread_attr_t)malloc(sizeof(struct _thread_attr));
  attr->thread = NULL;
  thread_attr_init(attr);
  return attr;
}
Exemplo n.º 2
0
int thread_context_init(struct netsniff_ng_thread_context * thread_ctx, const cpu_set_t run_on, const int sched_prio, const int sched_policy, const enum netsniff_ng_thread_type thread_type)
{
	int rc;
	assert(thread_ctx);

	memset(thread_ctx, 0, sizeof(*thread_ctx));
	
	if ((rc = pthread_attr_init(&thread_ctx->thread_attr)) != 0)
	{
		warn("Cannot initialize thread attributes\n");
		return (rc);
	}

	if ((rc = thread_attr_init(thread_ctx, sched_prio, sched_policy, &run_on)) != 0)
	{
		pthread_attr_destroy(&thread_ctx->thread_attr);
		warn("Cannot set thread attributes\n");
		return (rc);
	}

	if ((rc = pthread_mutex_init(&thread_ctx->wait_mutex, NULL)) != 0)
	{
		pthread_attr_destroy(&thread_ctx->thread_attr);
		warn("Cannot initialize thread mutex\n");
		return (rc);
	}
	
	if ((rc = pthread_cond_init(&thread_ctx->wait_cond, NULL)) != 0)
	{
		pthread_mutex_destroy(&thread_ctx->wait_mutex);
		pthread_attr_destroy(&thread_ctx->thread_attr);
		warn("Cannot initialize thread condition\n");
		return (rc);
	}

	if ((rc = pthread_spin_init(&thread_ctx->config_lock, PTHREAD_PROCESS_PRIVATE)) != 0)
	{
		pthread_cond_destroy(&thread_ctx->wait_cond);
		pthread_mutex_destroy(&thread_ctx->wait_mutex);
		pthread_attr_destroy(&thread_ctx->thread_attr);
		warn("Cannot initialize thread config lock\n");
		return (rc);
	}

	thread_ctx->run_on = run_on;
	thread_ctx->type = thread_type;
	thread_ctx->status = STOPPED;

	return(rc);
}