rbb 01/08/08 12:53:21 Modified: buckets apr_brigade.c Log: Change how apr_brigade_partition handles error conditions. If we have hit an error, apr_brigade_partition sets the after_point parameter to the last bucket that it was able to deal with. This means that if we asked for the brigade to be partitioned at point 9 and we are using non-blocking I/O on the brigade, but we only have 5 char's in the brigade, then we partition at spot 5, return the bucket after the 5th char, and return APR_EAGAIN. Revision Changes Path 1.21 +4 -4 apr-util/buckets/apr_brigade.c Index: apr_brigade.c =================================================================== RCS file: /home/cvs/apr-util/buckets/apr_brigade.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- apr_brigade.c 2001/08/08 15:40:35 1.20 +++ apr_brigade.c 2001/08/08 19:53:21 1.21 @@ -150,8 +150,8 @@ if ((point > (apr_size_t)(-1)) && (e->length == (apr_size_t)(-1))) { /* XXX: point is too far out to simply split this bucket, * we must fix this bucket's size and keep going... */ - if ((rv = apr_bucket_read(e, &s, &len, block)) - != APR_SUCCESS) { + if ((rv = apr_bucket_read(e, &s, &len, block)) != APR_SUCCESS) { + *after_point = e; return rv; } } @@ -167,8 +167,8 @@ /* if the bucket cannot be split, we must read from it, * changing its type to one that can be split */ - if ((rv = apr_bucket_read(e, &s, &len, block)) - != APR_SUCCESS) { + if ((rv = apr_bucket_read(e, &s, &len, block)) != APR_SUCCESS) { + *after_point = e; return rv; }