Why is this code getting a segmentation fault? how do i fix this?
Code:
void *producer(void* cb)
{
printf("testing\n");
bufferQueue *cbuffer = (bufferQueue *)cb;
put_buffer(cbuffer, 17);
destroy_buffer(cbuffer);
return cb;
}
int main(void)
{
semaphore sem;
bufferQueue cbuffer;
pthread_t thread;
init_sem(&sem);
init_buffer(&cbuffer, sem, 0, 5);
pthread_create(&thread, NULL, producer, (void*)(&cbuffer));
pthread_join(thread, NULL);
return EXIT_SUCCESS;
}
Code:
void init_buffer(bufferQueue *b, semaphore s, int min, int max)
{
b = malloc(sizeof(bufferQueue));
b->buffer_array = malloc(max*sizeof(int));
b->in = 0;
b->out = 0;
b->min_buffer_size = min;
b->max_buffer_size = max;
b->sem = s;
}
Code:
void put_buffer(bufferQueue *b, int v)
{
if((b->in+1)%b->max_buffer_size == b->out)
{
semWait(&(b->sem));
}
b->buffer_array[b->in] = v;
b->in = (b->in+1)%b->max_buffer_size;
semSignal(&(b->sem));
}