I am using HttpClient 4.5.10 and below is the code snippet that is used to make a GET request:
public String executeRequest(HttpRequestBase request, Header... headers) {
    try (CloseableHttpResponse response = execute(request, headers)) {
        return EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
    } catch (final IOException e) {
        throw new RuntimeException("Failed to execute request: " + request.toString(), e);
    }
}
I use lsof to monitor connections and this results in a new connection in ESTABLISHED state. Once the request gets executed, the connection moves into CLOSE_WAIT state but doesn't go away. Subsequent calls keep adding more connections to the list.
The question is, how do I make sure that the connection gets released back to pool (I use PoolingHttpClientConnectionManager)? Do I need to explicit close the request as well, e.g.:
public String executeRequest(HttpRequestBase request, Header... headers) {
    try (CloseableHttpResponse response = execute(request, headers)) {
        return EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
    } catch (final IOException e) {
        throw new RuntimeException("Failed to execute request: " + request.toString(), e);
    } finally {
        request.releaseConnection();
    }
}
Update
I have applied the above approach (i.e. request.releaseConnection()). However, I still see the open connections usin lsof. Looks like the connections are still there.
Is there anything else I need to do to explicitly close the connections?