Skip to content
Snippets Groups Projects
Commit bda14f81 authored by Bjoern Esswein's avatar Bjoern Esswein
Browse files

fixed sem.c jbuffer.c

parent 798091c2
No related branches found
No related tags found
No related merge requests found
...@@ -8,12 +8,14 @@ struct BNDBUF ...@@ -8,12 +8,14 @@ struct BNDBUF
int size; int size;
int insertpos; // next insert pos int insertpos; // next insert pos
SEM *freeSpaceSem; // count of free slots SEM *freeSpaceSem; // count of free slots
_Atomic int extractpos; // next extract pos int extractpos; // next extract pos
SEM *usedSpaceSem; // count of used slots SEM *usedSpaceSem; // count of used slots
}; };
BNDBUF *bbCreate(size_t size) { BNDBUF *bbCreate(size_t size) {
BNDBUF *bb = malloc(sizeof(BNDBUF)); if(size > __INT_MAX__) return NULL;//to big
BNDBUF *bb = calloc(1, sizeof(BNDBUF));//initialize everithing with NULL
if(bb == NULL) return NULL;//malloc failed if(bb == NULL) return NULL;//malloc failed
bb->buff = malloc(size * sizeof(int)); bb->buff = malloc(size * sizeof(int));
...@@ -21,7 +23,6 @@ BNDBUF *bbCreate(size_t size) { ...@@ -21,7 +23,6 @@ BNDBUF *bbCreate(size_t size) {
bbDestroy(bb); bbDestroy(bb);
return NULL; return NULL;
} }
//TODO: handle size too big
bb->size = (int) size; bb->size = (int) size;
//init SEMs //init SEMs
...@@ -44,7 +45,7 @@ BNDBUF *bbCreate(size_t size) { ...@@ -44,7 +45,7 @@ BNDBUF *bbCreate(size_t size) {
void bbDestroy(BNDBUF *bb) { void bbDestroy(BNDBUF *bb) {
if(bb == NULL) return; if(bb == NULL) return;
free(bb->buff); free(bb->buff);//each does noting if NULL
semDestroy(bb->freeSpaceSem); semDestroy(bb->freeSpaceSem);
semDestroy(bb->usedSpaceSem); semDestroy(bb->usedSpaceSem);
free(bb); free(bb);
......
...@@ -13,9 +13,20 @@ struct SEM ...@@ -13,9 +13,20 @@ struct SEM
SEM *semCreate(int initVal) { SEM *semCreate(int initVal) {
SEM *sem = malloc(sizeof(SEM)); SEM *sem = malloc(sizeof(SEM));
if(sem == NULL) return NULL;// malloc failed if(sem == NULL) return NULL;// malloc failed
int err=0;
pthread_mutex_init(&sem->m, NULL);// no errors err = pthread_mutex_init(&sem->m, NULL);
pthread_cond_init(&sem->c, NULL);// no errors if(err) {
free(sem);
errno = err;
return NULL;
}
err = pthread_cond_init(&sem->c, NULL);
if (err) {
pthread_mutex_destroy(&sem->m);
free(sem);
errno = err;
return NULL;
}
sem->value = initVal; sem->value = initVal;
return sem; return sem;
...@@ -24,17 +35,8 @@ SEM *semCreate(int initVal) { ...@@ -24,17 +35,8 @@ SEM *semCreate(int initVal) {
void semDestroy(SEM *sem) { void semDestroy(SEM *sem) {
if(sem == NULL) return; if(sem == NULL) return;
errno = 0; pthread_cond_destroy(&sem->c);//ignore returned errors
errno = pthread_cond_destroy(&sem->c); pthread_mutex_destroy(&sem->m);//ignore returned errors
if(errno != 0) {
return;
}
errno = pthread_mutex_destroy(&sem->m);
if(errno != 0) {
return;
}
free(sem); free(sem);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment