… | |
… | |
604 | |
604 | |
605 | static void grp_try_feed (eio_req *grp) |
605 | static void grp_try_feed (eio_req *grp) |
606 | { |
606 | { |
607 | while (grp->size < grp->int2 && !EIO_CANCELLED (grp)) |
607 | while (grp->size < grp->int2 && !EIO_CANCELLED (grp)) |
608 | { |
608 | { |
609 | int old_len = grp->size; |
609 | grp->flags &= ~EIO_FLAG_GROUPADD; |
610 | |
610 | |
611 | EIO_FEED (grp); |
611 | EIO_FEED (grp); |
612 | |
612 | |
613 | /* stop if no progress has been made */ |
613 | /* stop if no progress has been made */ |
614 | if (old_len == grp->size) |
614 | if (!(grp->flags & EIO_FLAG_GROUPADD)) |
615 | { |
615 | { |
616 | grp->feed = 0; |
616 | grp->feed = 0; |
617 | break; |
617 | break; |
618 | } |
618 | } |
619 | } |
619 | } |
… | |
… | |
1481 | |
1481 | |
1482 | void eio_grp_add (eio_req *grp, eio_req *req) |
1482 | void eio_grp_add (eio_req *grp, eio_req *req) |
1483 | { |
1483 | { |
1484 | assert (("cannot add requests to IO::AIO::GRP after the group finished", grp->int1 != 2)); |
1484 | assert (("cannot add requests to IO::AIO::GRP after the group finished", grp->int1 != 2)); |
1485 | |
1485 | |
|
|
1486 | grp->flags |= EIO_FLAG_GROUPADD; |
|
|
1487 | |
1486 | ++grp->size; |
1488 | ++grp->size; |
1487 | req->grp = grp; |
1489 | req->grp = grp; |
1488 | |
1490 | |
1489 | req->grp_prev = 0; |
1491 | req->grp_prev = 0; |
1490 | req->grp_next = grp->grp_first; |
1492 | req->grp_next = grp->grp_first; |