diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c
index 0d12aa93cac1f3b07a5a436685a0777b19af8797..0756319de34b4421f13d0699fbf257fa59f34f29 100644
--- a/res/res_rtp_asterisk.c
+++ b/res/res_rtp_asterisk.c
@@ -3741,6 +3741,8 @@ static int reload_module(void)
 
 static int load_module(void)
 {
+	pj_lock_t *lock;
+
 	pj_log_set_level(0);
 
 	if (pj_init() != PJ_SUCCESS) {
@@ -3767,6 +3769,14 @@ static int load_module(void)
 		return AST_MODULE_LOAD_DECLINE;
 	}
 
+	if (pj_lock_create_recursive_mutex(pool, "rtp%p", &lock) != PJ_SUCCESS) {
+		pj_caching_pool_destroy(&cachingpool);
+		pj_shutdown();
+		return AST_MODULE_LOAD_DECLINE;
+	}
+
+	pj_timer_heap_set_lock(timerheap, lock, PJ_TRUE);
+
 	if (pj_ioqueue_create(pool, 16, &ioqueue) != PJ_SUCCESS) {
 		pj_caching_pool_destroy(&cachingpool);
 		pj_shutdown();