diff --git a/main/manager.c b/main/manager.c
index 18e6b9bfadae3b7b7c9c34f7900dd720e54b0aa4..b4067e914565b5c4ff65d81a873bfe440cb72c18 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -3376,7 +3376,6 @@ static void *session_do(void *data)
 	if (session == NULL) {
 		goto done;
 	}
-	ao2_lock(sessions);
 
 	flags = fcntl(ser->fd, F_GETFL);
 	if (!block_sockets) { /* make sure socket is non-blocking */
@@ -3386,6 +3385,7 @@ static void *session_do(void *data)
 	}
 	fcntl(ser->fd, F_SETFL, flags);
 
+	ao2_lock(session);
 	/* Hook to the tail of the event queue */
 	session->last_ev = grab_last();
 
@@ -3399,7 +3399,7 @@ static void *session_do(void *data)
 
 	AST_LIST_HEAD_INIT_NOLOCK(&session->datastores);
 
-	ao2_unlock(sessions);
+	ao2_unlock(session);
 	astman_append(&s, "Asterisk Call Manager/%s\r\n", AMI_VERSION);	/* welcome prompt */
 	for (;;) {
 		if ((res = do_message(&s)) < 0) {