diff --git a/main/autoservice.c b/main/autoservice.c
index 98f798b1ae56683e4d60664c968521062e382b52..5293cbab4addf5bfa2b1884d3c19a42c695d3e02 100644
--- a/main/autoservice.c
+++ b/main/autoservice.c
@@ -131,6 +131,9 @@ static void *autoservice_run(void *ign)
 
 		callid = ast_channel_callid(chan);
 		ast_callid_threadassoc_change(callid);
+		if (callid) {
+			callid = ast_callid_unref(callid);
+		}
 
 		f = ast_read(chan);
 
@@ -180,11 +183,6 @@ static void *autoservice_run(void *ign)
 		 * If we did, we'd need to ast_frfree(f) if (f). */
 	}
 
-	if (callid) {
-		ast_callid_threadassoc_remove();
-		callid = ast_callid_unref(callid);
-	}
-
 	asthread = AST_PTHREADT_NULL;
 
 	return NULL;