Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Creating an easy handle polls file system every time for OpenSSL #362

Closed
sagebind opened this issue Oct 28, 2020 · 1 comment · Fixed by #363
Closed

Creating an easy handle polls file system every time for OpenSSL #362

sagebind opened this issue Oct 28, 2020 · 1 comment · Fixed by #363

Comments

@sagebind
Copy link
Collaborator

While doing some profiling of Isahc to see if I could squeeze any more performance out of it, I noticed that creating new easy handles was spending a noticeable amount of time in openssl_probe::probe. Not an egregious amount of time, mind you, but enough to be noticeable. Digging deeper I saw that this function allocates a fair number of PathBufs and makes std::fs::metadata calls to look for certificate files.

It is probably unlikely for these files to be changed at runtime, and if they do, I don't think most people would expect a running program to immediately pick up the change. Therefore I suggest that we lazily probe for certs just once, and re-use the results for subsequent easy handles created. Or at the very least, allow the user to opt-out of scanning for certs for every easy handle created.

@alexcrichton
Copy link
Owner

Oh dear I think that function is intended to only be called once, it definitely shouldn't need to be called each time!

sagebind added a commit that referenced this issue Oct 29, 2020
sagebind added a commit that referenced this issue Oct 29, 2020
sagebind added a commit that referenced this issue Oct 30, 2020
bors referenced this issue in rust-lang/rust-semverver Mar 15, 2021
Bump curl from 0.4.34 to 0.4.35

Bumps [curl](https://github.com/alexcrichton/curl-rust) from 0.4.34 to 0.4.35.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/alexcrichton/curl-rust/releases">curl's releases</a>.</em></p>
<blockquote>
<h2>0.4.35</h2>
<h2>Added</h2>
<ul>
<li>Add some more fields to <code>Debug</code> for <code>Version</code> (<a href="https://github.com/alexcrichton/curl-rust/issues/368">#368</a>)</li>
<li>Add <code>expect_100_timeout</code> option to mirror <a href="https://curl.se/libcurl/c/CURLOPT_EXPECT_100_TIMEOUT_MS.html"><code>CURLOPT_EXPECT_100_TIMEOUT_MS</code></a> (<a href="https://github.com/alexcrichton/curl-rust/issues/376">#376</a>)</li>
<li>Add feature-gated support for <code>curl_easy_upkeep</code>, introduced in 7.62.0. Use the <code>upkeep_7_62_0</code> feature to enable this method. (<a href="https://github.com/alexcrichton/curl-rust/issues/378">#378</a>)</li>
</ul>
<h2>Fixed</h2>
<ul>
<li>Probe for OpenSSL certificates only once (<a href="https://github.com/alexcrichton/curl-rust/issues/362">#362</a>, <a href="https://github.com/alexcrichton/curl-rust/issues/363">#363</a>)</li>
<li>Upgrade socket2 dependency to a version not making invalid assumptions about the memory layout of <code>std::net::SocketAddr</code>. (<a href="https://github.com/alexcrichton/curl-rust/issues/365">#365</a>)</li>
<li>Fix debug formatting for <code>Events</code> struct (<a href="https://github.com/alexcrichton/curl-rust/issues/377">#377</a>)</li>
<li>Fix <code>tcp_nodelay</code> not working for static builds on Unix (<a href="https://github.com/alexcrichton/curl-rust/issues/379">#379</a>, <a href="https://github.com/alexcrichton/curl-rust/issues/381">#381</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/alexcrichton/curl-rust/commit/e220da3c650ae6ea55c08591f36ead6d4a94f97e"><code>e220da3</code></a> Add support for zlib-ng (<a href="https://github.com/alexcrichton/curl-rust/issues/351">#351</a>)</li>
<li>See full diff in <a href="https://github.com/alexcrichton/curl-rust/compare/curl-sys-0.4.34...curl-sys-0.4.35">compare view</a></li>
</ul>
</details>
<br />

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=curl&package-manager=cargo&previous-version=0.4.34&new-version=0.4.35)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting ``@dependabot` rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- ``@dependabot` rebase` will rebase this PR
- ``@dependabot` recreate` will recreate this PR, overwriting any edits that have been made to it
- ``@dependabot` merge` will merge this PR after your CI passes on it
- ``@dependabot` squash and merge` will squash and merge this PR after your CI passes on it
- ``@dependabot` cancel merge` will cancel a previously requested merge and block automerging
- ``@dependabot` reopen` will reopen this PR if it is closed
- ``@dependabot` close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually

</details>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants