Hi,

I have been using evhttp for some time now for a project involving large POST datas. But now in production use I have noticed it leaking memory so I valgrinder it a bit. I am not sure if it is me using it wrong or if there is a bug somewhere there.
Basicly it uses more and more memory as it handles requests.
So here is the relevan valgrind outputs:

==14643== 4,096 bytes in 4 blocks are indirectly lost in loss record 7 of 13
==14643==    at 0x4A1B95B: realloc (vg_replace_malloc.c:306)
==14643== by 0x4C56E84: evbuffer_expand (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C56F21: evbuffer_add (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C59B0E: evhttp_make_header (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C5A824: evhttp_request_dispatch (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C5ABB0: evhttp_connectioncb (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C54E5D: event_process_active (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C5518F: event_base_loop (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C54FF6: event_loop (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C54EA6: event_dispatch (in /usr/local/lib/libevent-1.4.so.2.0.0)
==14643==    by 0x405753: main (main.cpp:8)


==14643== 6,144 bytes in 18 blocks are indirectly lost in loss record 8 of 13
==14643==    at 0x4A1B858: malloc (vg_replace_malloc.c:149)
==14643==    by 0x4A1B8D2: realloc (vg_replace_malloc.c:306)
==14643== by 0x4C56E84: evbuffer_expand (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C5713F: evbuffer_read (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C5B964: evhttp_read_header (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C54E5D: event_process_active (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C5518F: event_base_loop (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C54FF6: event_loop (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C54EA6: event_dispatch (in /usr/local/lib/libevent-1.4.so.2.0.0)
==14643==    by 0x405753: main (main.cpp:8)

==14643== 67,108,864 bytes in 2 blocks are still reachable in loss record 13 of 13
==14643==    at 0x4A1B95B: realloc (vg_replace_malloc.c:306)
==14643== by 0x4C56E84: evbuffer_expand (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C5713F: evbuffer_read (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C5A43D: evhttp_read (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C54E5D: event_process_active (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C5518F: event_base_loop (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C54FF6: event_loop (in /usr/local/lib/libevent-1.4.so.2.0.0) ==14643== by 0x4C54EA6: event_dispatch (in /usr/local/lib/libevent-1.4.so.2.0.0)
==14643==    by 0x405753: main (main.cpp:8)

The way I use evhttp is basicly:
evhttp_start
evhttp_set_gencb
In the callback:
Copy the data for later use from EVBUFFER_DATA(request->input_buffer)
add headers to output_headers: Content-Length: 0, Connection: close, and a Location:
evhttp_send_reply with HTTP_MOVEPERM
evhttp_send_reply_end


--
Matti Savolainen






_______________________________________________
Libevent-users mailing list
Libevent-users@monkey.org
http://monkeymail.org/mailman/listinfo/libevent-users

Reply via email to