Generator(s) no properly exit(s)

This commit is contained in:
zenon 2018-06-08 22:18:02 +02:00
parent 8277a26ed2
commit d6674d7aa4
2 changed files with 24 additions and 11 deletions

View File

@ -181,6 +181,8 @@ void printGraph()
void cleanup()
{
sem_post(sWriteEnd);
sem_post(sFreeSpace);
for (int v = 0; v < graph.V; v++) {
struct AdjListNode *pCrawl = graph.array[v].head;
struct AdjListNode *tmp;
@ -202,6 +204,8 @@ void cleanup()
sem_close(sUsedSpace);
sem_close(sFreeSpace);
sem_close(sWriteEnd);
exit(EXIT_SUCCESS);
}
@ -223,13 +227,20 @@ void wait_sem(sem_t *sem)
void putSolution(int *solution)
{
if (shared->quit == 1)
return;
wait_sem(sWriteEnd);
if (shared->quit == 1) {
quit = 1;
cleanup();
}
for (int i = 0; i < MAX_ITEMS; i++) {
wait_sem(sFreeSpace);
if (shared->quit == 1) {
quit = 1;
cleanup();
}
shared->data[shared->tail] = solution[i];
shared->tail = (shared->tail + 1) % MAX_ITEMS;
sem_post(sUsedSpace);
@ -249,6 +260,11 @@ int findIndex(int array[], int value, int size)
void genSolution(int permutation[], int V, int *solution)
{
if (shared->quit == 1) {
quit = 1;
cleanup();
}
int r;
// initialize array to indices
@ -285,14 +301,6 @@ void genSolution(int permutation[], int V, int *solution)
pCrawl = pCrawl->next;
}
}
/*
printf("[");
for (int i = 0; i < (count - 1); i++) {
printf("%d, ", solution[i]);
}
printf("%d]\n", solution[count-1]);
*/
}
int main(int argc, char *argv[])

View File

@ -41,6 +41,9 @@ void usage(void)
void cleanup()
{
shared->quit = 1;
sem_wait(sUsedSpace);
sem_post(sWriteEnd);
sem_post(sFreeSpace);
if (munmap(shared, sizeof(*shared)) == -1) {
perror("munmap");
@ -58,6 +61,8 @@ void cleanup()
sem_unlink(SEM_USED_SPACE);
sem_unlink(SEM_FREE_SPACE);
sem_unlink(SEM_WRITE_END);
exit(EXIT_SUCCESS);
}
void initCircBuf()