On Sunday, 1 July 2018 at 13:44:23 UTC, Anton Fediushin wrote:

I reduced the test case to _one_ line:
```
1.seconds.setTimer(() => "http://google.com".requestHTTP((scope req) {}, (scope res) {res.disconnect;}), true);
```

What happens is `res.disconnect` doesn't free all of the internal buffers, causing leakage. One way to avoid that is to call `res.dropBody`, but it isn't always wanted (just like in my example).
 The problem is known and mentioned in the documentation:
http://vibed.org/api/vibe.http.client/requestHTTP

Note that it is highly recommended to use one of the overloads that take a responder callback, as they can avoid some memory allocations and are safe against accidentally leaving stale response objects (objects whose response body wasn't fully read). For the returning overloads of the function it is recommended to put a scope(exit) right after the call in which HTTPClientResponse.dropBody is called to avoid this.

As I understand the situation, request object will reside in memory until you fully read or do something with response body.

Reply via email to