=== modified file 'django/core/handlers/base.py'
--- django/core/handlers/base.py	2010-01-10 17:35:01 +0000
+++ django/core/handlers/base.py	2010-01-10 18:23:48 +0000
@@ -72,20 +72,22 @@
             try:
                 # Reset the urlconf for this thread.
                 urlresolvers.set_urlconf(None)
+                # Obtain a default resolver. It's needed early for handling 404's.
+                resolver = urlresolvers.RegexURLResolver(r'^/', None)
+
+                # Apply request middleware
+                for middleware_method in self._request_middleware:
+                    response = middleware_method(request)
+                    if response:
+                        return response
 
                 # Get urlconf from request object, if available.  Otherwise use default.
                 urlconf = getattr(request, "urlconf", settings.ROOT_URLCONF)
-
                 # Set the urlconf for this thread to the one specified above.
                 urlresolvers.set_urlconf(urlconf)
+                # Reset the resolver with a possibly new urlconf
                 resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
 
-                # Apply request middleware
-                for middleware_method in self._request_middleware:
-                    response = middleware_method(request)
-                    if response:
-                        return response
-
                 callback, callback_args, callback_kwargs = resolver.resolve(
                         request.path_info)
 

=== modified file 'tests/regressiontests/middleware_exceptions/tests.py'
--- tests/regressiontests/middleware_exceptions/tests.py	2010-01-10 17:35:01 +0000
+++ tests/regressiontests/middleware_exceptions/tests.py	2010-01-10 18:43:01 +0000
@@ -8,15 +8,13 @@
         raise Exception('Exception')
 
 class MiddlewareExceptionTest(TestCase):
-    def __init__(self, *args, **kwargs):
-        super(MiddlewareExceptionTest, self).__init__(*args, **kwargs)
+    def setUp(self):
         self.exceptions = []
         got_request_exception.connect(self._on_request_exception)
-
-    def setUp(self):
         self.client.handler.load_middleware()
 
     def tearDown(self):
+        got_request_exception.disconnect(self._on_request_exception)
         self.exceptions = []
 
     def _on_request_exception(self, sender, request, **kwargs):

