From a8cd80279624c8c4b1862fa541e009158d6e1981 Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Tue, 21 Oct 2008 14:29:47 +0000 Subject: Ticket #558: Added srtp_deinit() function and registered this with pj_atexit(). git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2353 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/src/pjmedia/transport_srtp.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'pjmedia') diff --git a/pjmedia/src/pjmedia/transport_srtp.c b/pjmedia/src/pjmedia/transport_srtp.c index 708aa77d..a3378923 100644 --- a/pjmedia/src/pjmedia/transport_srtp.c +++ b/pjmedia/src/pjmedia/transport_srtp.c @@ -260,6 +260,8 @@ const char* get_libsrtp_errstr(int err) #endif } +static void pjmedia_srtp_deinit_lib(void); + static pj_status_t pjmedia_srtp_init_lib(void) { static pj_bool_t initialized = PJ_FALSE; @@ -273,12 +275,32 @@ static pj_status_t pjmedia_srtp_init_lib(void) return PJMEDIA_ERRNO_FROM_LIBSRTP(err); } + if (pj_atexit(pjmedia_srtp_deinit_lib) != PJ_SUCCESS) { + /* There will be memory leak when it fails to schedule libsrtp + * deinitialization, however the memory leak could be harmless, + * since in modern OS's memory used by an application is released + * when the application terminates. + */ + PJ_LOG(4, (THIS_FILE, "Failed to register libsrtp deinit.")); + } + initialized = PJ_TRUE; } return PJ_SUCCESS; } +static void pjmedia_srtp_deinit_lib(void) +{ + err_status_t err; + + err = srtp_deinit(); + if (err != err_status_ok) { + PJ_LOG(4, (THIS_FILE, "Failed to deinitialize libsrtp: %s", + get_libsrtp_errstr(err))); + } +} + static int get_crypto_idx(const pj_str_t* crypto_name) { int i; -- cgit v1.2.3