From: Nikos Mavrogiannopoulos Date: Sun, 20 Feb 2011 10:10:14 +0000 (+0100) Subject: reference counting in epochs is being done using functions. X-Git-Tag: gnutls_2_99_0~215 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fa082d45c877727e1e7e2297228f7e6ee0b7f8b6;p=thirdparty%2Fgnutls.git reference counting in epochs is being done using functions. --- diff --git a/lib/gnutls_buffers.c b/lib/gnutls_buffers.c index 4df1d57154..9ba73c8c1f 100644 --- a/lib/gnutls_buffers.c +++ b/lib/gnutls_buffers.c @@ -883,7 +883,7 @@ _gnutls_handshake_io_cache_int (gnutls_session_t session, bufel->htype = htype; bufel->sequence = session->internals.dtls.hsk_write_seq-1; - params->usage_cnt++; + _gnutls_epoch_refcount_inc(params); } send_buffer = diff --git a/lib/gnutls_constate.h b/lib/gnutls_constate.h index aa1cad8e21..9ec9f33b5c 100644 --- a/lib/gnutls_constate.h +++ b/lib/gnutls_constate.h @@ -47,4 +47,18 @@ void _gnutls_epoch_gc (gnutls_session_t session); void _gnutls_epoch_free (gnutls_session_t session, record_parameters_st * state); +static inline void _gnutls_epoch_refcount_inc(record_parameters_st * params) +{ + params->usage_cnt++; +} + +static inline int _gnutls_epoch_refcount_dec(record_parameters_st * params) +{ + params->usage_cnt--; + if (params->usage_cnt < 0) + return GNUTLS_E_INTERNAL_ERROR; + + return 0; +} + #endif diff --git a/lib/gnutls_dtls.c b/lib/gnutls_dtls.c index 7c2ddfa7bf..912f666df6 100644 --- a/lib/gnutls_dtls.c +++ b/lib/gnutls_dtls.c @@ -126,9 +126,10 @@ static int drop_usage_count(gnutls_session_t session) ret = _gnutls_epoch_get( session, cur->epoch, ¶ms); if (ret < 0) return gnutls_assert_val(ret); - params->usage_cnt--; - if (params->usage_cnt < 0) - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + ret = _gnutls_epoch_refcount_dec(params); + if (ret < 0) + return gnutls_assert_val(ret); } return 0;