Index: asterisk-11.21.0-rc1/res/res_rtp_asterisk.c =================================================================== --- asterisk-11.21.0-rc1.orig/res/res_rtp_asterisk.c 2015-12-24 11:02:25.000000000 +0000 +++ asterisk-11.21.0-rc1/res/res_rtp_asterisk.c 2015-12-24 11:02:25.000000000 +0000 @@ -1950,7 +1950,10 @@ } out = BIO_read(dtls->write_bio, outgoing, sizeof(outgoing)); + + ast_mutex_unlock(&dtls->lock); __rtp_sendto(instance, outgoing, out, 0, &remote_address, rtcp, &ice, 0); + ast_mutex_lock(&dtls->lock); } } @@ -1959,15 +1962,15 @@ struct ast_rtp_instance *instance = (struct ast_rtp_instance *)data; struct ast_rtp *rtp = ast_rtp_instance_get_data(instance); + /* TODO: No DTLS lock necessary??? */ SSL_renegotiate(rtp->dtls.ssl); SSL_do_handshake(rtp->dtls.ssl); - dtls_srtp_check_pending(instance, rtp, 0); if (rtp->rtcp && rtp->rtcp->dtls.ssl) { SSL_renegotiate(rtp->rtcp->dtls.ssl); SSL_do_handshake(rtp->rtcp->dtls.ssl); - dtls_srtp_check_pending(instance, rtp, 1); } + dtls_srtp_flush_pending(instance, rtp); rtp->rekeyid = -1; ao2_ref(instance, -1);