From 55c338d7afebe57194061ee1886c07f3a7dcb54b Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Wed, 25 Jun 2014 21:19:12 +0900 Subject: [PATCH] nghttp2_session_*_new: Leave session parameter untouched on failure --- lib/includes/nghttp2/nghttp2.h | 4 ++++ lib/nghttp2_session.c | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/includes/nghttp2/nghttp2.h b/lib/includes/nghttp2/nghttp2.h index a19a5112..f0d3d3d0 100644 --- a/lib/includes/nghttp2/nghttp2.h +++ b/lib/includes/nghttp2/nghttp2.h @@ -1564,6 +1564,8 @@ void nghttp2_option_set_peer_max_concurrent_streams(nghttp2_option *option, * the :member:`nghttp2_session_callbacks.recv_callback` must be * specified. The other members of |callbacks| can be ``NULL``. * + * If this function fails, |*session_ptr| is left untouched. + * * This function returns 0 if it succeeds, or one of the following * negative error codes: * @@ -1587,6 +1589,8 @@ int nghttp2_session_client_new(nghttp2_session **session_ptr, * the :member:`nghttp2_session_callbacks.recv_callback` must be * specified. The other members of |callbacks| can be ``NULL``. * + * If this function fails, |*session_ptr| is left untouched. + * * This function returns 0 if it succeeds, or one of the following * negative error codes: * diff --git a/lib/nghttp2_session.c b/lib/nghttp2_session.c index 1a05b960..914a9103 100644 --- a/lib/nghttp2_session.c +++ b/lib/nghttp2_session.c @@ -415,14 +415,18 @@ int nghttp2_session_client_new2(nghttp2_session **session_ptr, const nghttp2_option *option) { int rv; + nghttp2_session *session; - rv = session_new(session_ptr, callbacks, user_data, 0, option); + rv = session_new(&session, callbacks, user_data, 0, option); if(rv != 0) { return rv; } /* IDs for use in client */ - (*session_ptr)->next_stream_id = 1; + session->next_stream_id = 1; + + *session_ptr = session; + return 0; } @@ -439,14 +443,18 @@ int nghttp2_session_server_new2(nghttp2_session **session_ptr, const nghttp2_option *option) { int rv; + nghttp2_session *session; - rv = session_new(session_ptr, callbacks, user_data, 1, option); + rv = session_new(&session, callbacks, user_data, 1, option); if(rv != 0) { return rv; } /* IDs for use in client */ - (*session_ptr)->next_stream_id = 2; + session->next_stream_id = 2; + + *session_ptr = session; + return 0; }