diff --git a/res/pjproject/pjnath/include/pjnath/ice_session.h b/res/pjproject/pjnath/include/pjnath/ice_session.h
index cf153728a349667ec63e7dc0d0bc1c4ebcfe9026..f48e12d41990ebb6466c909f84f6e26540984ff2 100644
--- a/res/pjproject/pjnath/include/pjnath/ice_session.h
+++ b/res/pjproject/pjnath/include/pjnath/ice_session.h
@@ -619,6 +619,7 @@ struct pj_ice_sess
     pj_uint8_t		*prefs;			    /**< Type preference.   */
     pj_bool_t		 is_nominating;		    /**< Nominating stage   */
     pj_bool_t		 is_complete;		    /**< Complete?	    */
+    pj_bool_t		 is_destroying;		    /**< Destroy is called  */
     pj_status_t		 ice_status;		    /**< Error status.	    */
     pj_timer_entry	 timer;			    /**< ICE timer.	    */
     pj_ice_sess_cb	 cb;			    /**< Callback.	    */
diff --git a/res/pjproject/pjnath/src/pjnath/ice_session.c b/res/pjproject/pjnath/src/pjnath/ice_session.c
index bf94e54517800e27c997708b68453c5e366ad6cf..40e10d558b649d4fe3e182d339ba7cd72ed61679 100644
--- a/res/pjproject/pjnath/src/pjnath/ice_session.c
+++ b/res/pjproject/pjnath/src/pjnath/ice_session.c
@@ -455,6 +455,8 @@ static void destroy_ice(pj_ice_sess *ice,
 	LOG4((ice->obj_name, "Destroying ICE session"));
     }
 
+    ice->is_destroying = PJ_TRUE;
+
     /* Let other callbacks finish */
     if (ice->mutex) {
 	pj_mutex_lock(ice->mutex);
@@ -1840,8 +1842,16 @@ static pj_status_t start_periodic_check(pj_timer_heap_t *th,
     ice = td->ice;
     clist = td->clist;
 
+    if (ice->is_destroying)
+	return PJ_SUCCESS;
+
     pj_mutex_lock(ice->mutex);
 
+    if (ice->is_destroying) {
+	pj_mutex_unlock(ice->mutex);
+	return PJ_SUCCESS;
+    }
+
     /* Set timer ID to FALSE first */
     te->id = PJ_FALSE;