# Fix deadlock in chan_pjsip_new when endpoint set_var uses PJSIP_HEADER.
# Unlock channel before iterating endpoint channel_vars so that dialplan
# functions (e.g. PJSIP_HEADER) can block on serializer tasks without
# holding the channel lock. Re-lock for ast_channel_stage_snapshot_done()
# so the batched snapshot is published under lock.
# pbx_builtin_setvar_helper acquires/releases channel lock on its own.
Index: asterisk-22.8.2/channels/chan_pjsip.c
===================================================================
--- asterisk-22.8.2.orig/channels/chan_pjsip.c
+++ asterisk-22.8.2/channels/chan_pjsip.c
@@ -665,13 +665,16 @@ static struct ast_channel *chan_pjsip_ne
 		ast_channel_zone_set(chan, zone);
 	}

+	ast_channel_unlock(chan);
+
 	for (var = session->endpoint->channel_vars; var; var = var->next) {
 		char buf[512];
 		pbx_builtin_setvar_helper(chan, var->name, ast_get_encoded_str(
 					var->value, buf, sizeof(buf)));
 	}

+	ast_channel_lock(chan);
 	ast_channel_stage_snapshot_done(chan);
 	ast_channel_unlock(chan);

 	set_channel_on_rtp_instance(session, ast_channel_uniqueid(chan));
