Was the message lost or no one interested in this issue?

best regards,
hanzhu


On Mon, Jun 28, 2010 at 9:25 PM, Zhu Han <schumi....@gmail.com> wrote:

> Frank, Thank you for your patch.
>
> I made another patch several minutes ago.
>
> evhttp_request->userdone is used to indicate there is data being sending by
> the client. I suppose it is only useful for chunk encoding response. So I
> revert the meaning from userdone to user_working and mark the flag only when
> chunk encoding is started. IMHO, this should fix this issue. Could the
> maintainers take a look at it? Thank you!
>
> This patch is against libevent-1.4.14b.
>
> diff --git a/evhttp.h b/evhttp.h
> index 7ddf720..77ff781 100644
> --- a/evhttp.h
> +++ b/evhttp.h
> @@ -222,7 +222,7 @@ struct {
>         struct evbuffer *input_buffer;  /* read data */
>         ev_int64_t ntoread;
>         int chunked:1,                  /* a chunked request */
> -           userdone:1;                 /* the user has sent all data */
> +           user_working:1;             /* the user is sending the data */
>
>         struct evbuffer *output_buffer; /* outgoing post or data */
>
> diff --git a/http.c b/http.c
> index efcec40..aaaa6d6 100644
> --- a/http.c
> +++ b/http.c
> @@ -610,8 +610,8 @@ evhttp_connection_incoming_fail(struct evhttp_request
> *req,
>                  * the request is still being used for sending, we
>                  * need to disassociated it from the connection here.
>                  */
> -               if (!req->userdone) {
>
> -                       /* remove it so that it will not be freed */
> +               if (req->user_working) {
> +                       /* remove it so that it will not be freed*/
>
>                         TAILQ_REMOVE(&req->evcon->requests, req, next);
>                         /* indicate that this request no longer has a
>                          * connection object
> @@ -1942,7 +1942,7 @@ evhttp_send(struct evhttp_request *req, struct
> evbuffer *databuf)
>         assert(TAILQ_FIRST(&evcon->requests) == req);
>
>         /* we expect no more calls form the user on this request */
> -       req->userdone = 1;
> +       req->user_working = 0;
>
>         /* xxx: not sure if we really should expose the data buffer this
> way */
>         if (databuf != NULL)
> @@ -1967,6 +1967,8 @@ void
>  evhttp_send_reply_start(struct evhttp_request *req, int code,
>      const char *reason)
>  {
> +        /* mark the user is sending the request */
> +        req->user_working = 1;
>         evhttp_response_code(req, code, reason);
>         if (req->major == 1 && req->minor == 1) {
>                 /* use chunked encoding for HTTP/1.1 */
> @@ -2008,7 +2010,7 @@ evhttp_send_reply_end(struct evhttp_request *req)
>         }
>
>         /* we expect no more calls form the user on this request */
> -       req->userdone = 1;
> +       req->user_working = 0;
>
>         if (req->chunked) {
>                 evbuffer_add(req->evcon->output_buffer, "0\r\n\r\n", 5);
>
>
>
> best regards,
> hanzhu
>
>
>
> On Mon, Jun 28, 2010 at 7:32 PM, Frank Denis <libev...@pureftpd.org>wrote:
>
>> Le Mon, Jun 28, 2010 at 07:21:21PM +0800, Zhu Han ecrivait :
>> > I observed the same problem in my environment. I took some time to trace
>> the
>> > cause. Seems like it's really a bug.  Does anybody help me verify it and
>> > give a possible fix?
>>
>>   This fixes it for me, although it's probably not the right way to fix
>> this :
>>
>> diff -ur /tmp/a/http.c /tmp/b/http.c
>> --- /tmp/a/http.c       2010-06-28 13:29:03.000000000 +0200
>> +++ /tmp/b/http.c       2010-06-13 11:41:49.000000000 +0200
>> @@ -557,7 +557,9 @@
>>                 */
>>                if (!req->userdone) {
>>                        /* remove it so that it will not be freed */
>> -                       TAILQ_REMOVE(&req->evcon->requests, req, next);
>> +                       if (req->evcon->http_server == NULL) {
>> +                               TAILQ_REMOVE(&req->evcon->requests, req,
>> next);
>> +                       }
>>                        /* indicate that this request no longer has a
>>                         * connection object
>>                         */
>>
>> --
>> Frank Denis - j [at] pureftpd.org - http://00f.net
>> _______________________________________________
>> Libevent-users mailing list
>> Libevent-users@monkey.org
>> http://lists.monkey.org:8080/listinfo/libevent-users
>>
>
>
_______________________________________________
Libevent-users mailing list
Libevent-users@monkey.org
http://lists.monkey.org:8080/listinfo/libevent-users

Reply via email to