Exemple #1
0
void queue_del(JOB *job)
{
	if (job) {
		debug_printf("queue_del %p\n", (void *)job);

		// special handling for automatic robots.txt jobs
		if (job->deferred) {
			JOB new_job = { .iri = NULL };

			if (job->host)
				job->host->robot_job = NULL;
			mget_iri_free(&job->iri);

			// create a job for each deferred IRI
			for (int it = 0; it < mget_vector_size(job->deferred); it++) {
				new_job.iri = mget_vector_get(job->deferred, it);
				new_job.local_filename = get_local_filename(new_job.iri);
				queue_add_job(&new_job);
			}
		}

		job_free(job);

		mget_thread_mutex_lock(&mutex);
		mget_list_remove(&queue, job);
		mget_thread_mutex_unlock(&mutex);
	}
/*
 *	Adds a new job on the thread pool to be executed
 */
int pool_add_job(thread_pool_t* pool, void* (*func) (void*), void* arg) {
	if(pool == NULL || func == NULL) {
		return 0;
	}

	job_t* job = (job_t*) malloc(sizeof(job_t));
	job->func = func;
	job->arg = arg;
	job->next = NULL;

	pthread_mutex_lock(&pool->mutex);

	queue_add_job(&pool->queue, job);
	pthread_cond_signal(&pool->has_jobs);

	pthread_mutex_unlock(&pool->mutex);
	return 1;
}