diff --git a/src/mandelbrot.c b/src/mandelbrot.c index 489ed19..946cf4e 100644 --- a/src/mandelbrot.c +++ b/src/mandelbrot.c @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -120,18 +121,46 @@ draw(void *closure, struct scheduler *s) // Sinon on recoupe le morceau int mid_x = (start_x + end_x) / 2; int mid_y = (start_y + end_y) / 2; + int rc; - int rc1 = sched_spawn( - draw, new_mandelbrot_args(image, start_x, start_y, mid_x, mid_y), - s); - int rc2 = sched_spawn( - draw, new_mandelbrot_args(image, mid_x, start_y, end_x, mid_y), s); - int rc3 = sched_spawn( - draw, new_mandelbrot_args(image, start_x, mid_y, mid_x, end_y), s); - int rc4 = sched_spawn( - draw, new_mandelbrot_args(image, mid_x, mid_y, end_x, end_y), s); + while((rc = sched_spawn( + draw, + new_mandelbrot_args(image, start_x, start_y, mid_x, mid_y), + s)) < 0) { + if(errno != EAGAIN) { + break; + } + } + assert(rc >= 0); - assert(rc1 >= 0 && rc2 >= 0 && rc3 >= 0 && rc4 >= 0); + while( + (rc = sched_spawn( + draw, new_mandelbrot_args(image, mid_x, start_y, end_x, mid_y), + s)) < 0) { + if(errno != EAGAIN) { + break; + } + } + assert(rc >= 0); + + while( + (rc = sched_spawn( + draw, new_mandelbrot_args(image, start_x, mid_y, mid_x, end_y), + s)) < 0) { + if(errno != EAGAIN) { + break; + } + } + assert(rc >= 0); + + while((rc = sched_spawn( + draw, new_mandelbrot_args(image, mid_x, mid_y, end_x, end_y), + s)) < 0) { + if(errno != EAGAIN) { + break; + } + } + assert(rc >= 0); } } @@ -154,7 +183,7 @@ benchmark_mandelbrot(int serial, int nthreads) int rc; int size = WIDTH * HEIGHT; - if(!(image = malloc(size * sizeof(unsigned int)))) { + if(!(image = malloc(WIDTH * HEIGHT * sizeof(unsigned int)))) { perror("Image allocation"); return 1; } diff --git a/src/quicksort.c b/src/quicksort.c index 9351cc8..d4701a8 100644 --- a/src/quicksort.c +++ b/src/quicksort.c @@ -2,6 +2,7 @@ #include "../includes/sched.h" #include +#include #include #include #include @@ -87,9 +88,19 @@ quicksort(void *closure, struct scheduler *s) } p = partition(a, lo, hi); - rc = sched_spawn(quicksort, new_args(a, lo, p), s); + + while((rc = sched_spawn(quicksort, new_args(a, lo, p), s)) < 0) { + if(errno != EAGAIN) { + break; + } + } assert(rc >= 0); - rc = sched_spawn(quicksort, new_args(a, p + 1, hi), s); + + while((rc = sched_spawn(quicksort, new_args(a, p + 1, hi), s)) < 0) { + if(errno != EAGAIN) { + break; + } + } assert(rc >= 0); }