diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 69cfea7a731eea530f654ff57d1149bb239bfa89..b08a5495842ed165bcb86b436c720a0e3fb05499 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -23138,8 +23138,6 @@ static int local_attended_transfer(struct sip_pvt *transferer, struct sip_dual *
 
 		ast_do_masquerade(target.chan1);
 
-		sip_pvt_lock(transferer); /* the transferer pvt is expected to remain locked on return */
-
 		ast_indicate(target.chan1, AST_CONTROL_UNHOLD);
 		if (target.chan2) {
 			ast_indicate(target.chan2, AST_CONTROL_UNHOLD);
@@ -23180,6 +23178,8 @@ static int local_attended_transfer(struct sip_pvt *transferer, struct sip_dual *
 			ast_channel_queue_connected_line_update(target.chan1, &connected_to_transferee, NULL);
 
 		}
+		sip_pvt_lock(transferer); /* the transferer pvt is expected to remain locked on return */
+
 		ast_channel_unref(current->chan1);
 	}