diff --git a/src/bio.c b/src/bio.c index fc85afd80d359222cefbbcf4f9e84dcf3334a631..fce0658f1669ef19da543b95e3910ef52f079d43 100644 --- a/src/bio.c +++ b/src/bio.c @@ -33,23 +33,27 @@ list *bio_jobs; struct bio_job { int type; /* Job type, for instance BIO_JOB_CLOSE */ void *data; /* Job specific arguments pointer. */ -} +}; void *bioProcessBackgroundJobs(void *arg); +/* Make sure we have enough stack to perform all the things we do in the + * main thread. */ +#define REDIS_THREAD_STACK_SIZE (1024*1024*4) + /* Initialize the background system, spawning the thread. */ void bioInit(void) { pthread_attr_t attr; pthread_t thread; size_t stacksize; - pthread_mutex_init(bio_mutex,NULL); - pthread_cond_init(bio_condvar,NULL); + pthread_mutex_init(&bio_mutex,NULL); + pthread_cond_init(&bio_condvar,NULL); bio_jobs = listCreate(); /* Set the stack size as by default it may be small in some system */ pthread_attr_init(&attr); - pthread_attr_getstacksize(&attr); + pthread_attr_getstacksize(&attr,&stacksize); if (!stacksize) stacksize = 1; /* The world is full of Solaris Fixes */ while (stacksize < REDIS_THREAD_STACK_SIZE) stacksize *= 2; pthread_attr_setstacksize(&attr, stacksize); @@ -73,6 +77,7 @@ void bioCreateBackgroundJob(int type, void *data) { void *bioProcessBackgroundJobs(void *arg) { struct bio_job *job; + REDIS_NOTUSED(arg); pthread_detach(pthread_self()); pthread_mutex_lock(&bio_mutex);