diff options
Diffstat (limited to 'lib/url.c')
-rw-r--r-- | lib/url.c | 24 |
1 files changed, 23 insertions, 1 deletions
@@ -4176,7 +4176,12 @@ static void llist_dtor(void *user, void *element) */ static struct connectdata *allocate_conn(struct Curl_easy *data) { - struct connectdata *conn = calloc(1, sizeof(struct connectdata)); +#ifdef USE_SSL +#define SSL_EXTRA + 4 * Curl_ssl->sizeof_ssl_backend_data - sizeof(long long) +#else +#define SSL_EXTRA 0 +#endif + struct connectdata *conn = calloc(1, sizeof(struct connectdata) + SSL_EXTRA); if(!conn) return NULL; @@ -4259,6 +4264,23 @@ static struct connectdata *allocate_conn(struct Curl_easy *data) conn->ip_version = data->set.ipver; +#ifdef USE_SSL + /* + * To save on malloc()s, the SSL backend-specific data has been allocated + * at the end of the connectdata struct. + */ + { + char *p = (char *)&conn->align_data__do_not_use; + conn->ssl[0].backend = (struct ssl_backend_data *)p; + conn->ssl[1].backend = + (struct ssl_backend_data *)(p + Curl_ssl->sizeof_ssl_backend_data); + conn->proxy_ssl[0].backend = + (struct ssl_backend_data *)(p + Curl_ssl->sizeof_ssl_backend_data * 2); + conn->proxy_ssl[1].backend = + (struct ssl_backend_data *)(p + Curl_ssl->sizeof_ssl_backend_data * 3); + } +#endif + #if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM) && \ defined(NTLM_WB_ENABLED) conn->ntlm_auth_hlpr_socket = CURL_SOCKET_BAD; |