[#7047] Fixed substitute_extensions not switching back on exception

Signed-off-by: Cory Johns <cjohns@slashdotmedia.com>
diff --git a/Allura/allura/model/session.py b/Allura/allura/model/session.py
index 82973ce..77f8645 100644
--- a/Allura/allura/model/session.py
+++ b/Allura/allura/model/session.py
@@ -222,8 +222,10 @@
         session.close()
         session._kwargs['extensions'] = exts
     _set_exts(extensions or [])
-    yield session
-    _set_exts(original_exts)
+    try:
+        yield session
+    finally:
+        _set_exts(original_exts)
 
 
 main_doc_session = Session.by_name('main')
diff --git a/Allura/allura/tests/unit/test_session.py b/Allura/allura/tests/unit/test_session.py
index b079004..1c5ea08 100644
--- a/Allura/allura/tests/unit/test_session.py
+++ b/Allura/allura/tests/unit/test_session.py
@@ -27,11 +27,17 @@
 def test_extensions_cm():
     session = mock.Mock(_kwargs=dict(extensions=[]))
     extension = mock.Mock()
-    with substitute_extensions(session, [extension]) as sess:
-        assert session.flush.call_count == 1
-        assert session.close.call_count == 1
-        assert sess == session
-        assert sess._kwargs['extensions'] == [extension]
+    try:
+        with substitute_extensions(session, [extension]) as sess:
+            assert session.flush.call_count == 1
+            assert session.close.call_count == 1
+            assert sess == session
+            assert sess._kwargs['extensions'] == [extension]
+            raise ValueError('test')
+    except ValueError as e:
+        pass
+    else:
+        assert False, "Exception didn't propagate"
     assert session.flush.call_count == 2
     assert session.close.call_count == 2
     assert session._kwargs['extensions'] == []