diff --git a/lib/sessions.js b/lib/sessions.js index 28c0a4939..d41896459 100644 --- a/lib/sessions.js +++ b/lib/sessions.js @@ -140,7 +140,7 @@ class ServerSessionPool { } if (!session.hasTimedOut(sessionTimeoutMinutes)) { - this.sessions.push(session); + this.sessions.unshift(session); } } } diff --git a/test/tests/unit/sessions_tests.js b/test/tests/unit/sessions_tests.js index 69c6e14b7..20ce52dd7 100644 --- a/test/tests/unit/sessions_tests.js +++ b/test/tests/unit/sessions_tests.js @@ -169,5 +169,25 @@ describe('Sessions', function() { done(); } }); + + it('should maintain a LIFO queue of sessions', { + metadata: { requires: { topology: 'single' } }, + test: function(done) { + const pool = new ServerSessionPool(test.client); + + const sessionA = new ServerSession(); + const sessionB = new ServerSession(); + + pool.release(sessionA); + pool.release(sessionB); + + const sessionC = pool.acquire(); + const sessionD = pool.acquire(); + + expect(sessionC.id).to.eql(sessionB.id); + expect(sessionD.id).to.eql(sessionA.id); + done(); + } + }); }); });