diff --git a/main/pbx.c b/main/pbx.c
index 7262df6d19a99d7695819bda59bd7b6c971f443f..cd8a23ca88a71c5332d9ac8a38019087c56a81b6 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -2742,6 +2742,7 @@ static void handle_statechange(const char *device)
 {
 	struct ast_hint *hint;
 
+	ast_rdlock_contexts();
 	AST_RWLIST_RDLOCK(&hints);
 
 	AST_RWLIST_TRAVERSE(&hints, hint, list) {
@@ -2779,6 +2780,7 @@ static void handle_statechange(const char *device)
 	}
 
 	AST_RWLIST_UNLOCK(&hints);
+	ast_unlock_contexts();
 }
 
 static int statechange_queue(const char *dev)