Boolean Cut Problems

Hello,
When I use BRepAlgoAPI_Cut to cut tool(some cylinders),the result is not as what I wish, some cylinders seem cutted right, but others have errors:

TopoDS_Shape shape = revol.Shape();
TopoDS_Shape tool = *rollers;
BRepAlgoAPI_Cut brep_cut(shape, tool);

I tried cut cylinder one by one, but the result is the same.
The position which has problems seems filled with boolean common of shape and single sub tool(cylinder).

thanks.