From cfd505d9a2182b9077ddeae6401e006e7c7152ca Mon Sep 17 00:00:00 2001
From: Michel Pelletier <michel@svn.zope.org>
Date: Tue, 17 Aug 1999 19:33:00 +0000
Subject: [PATCH] Fixed REQUEST.clone() resource leak

---
 lib/python/Products/ZCatalog/ZCatalog.py | 26 ++++++++++++++----------
 1 file changed, 15 insertions(+), 11 deletions(-)

diff --git a/lib/python/Products/ZCatalog/ZCatalog.py b/lib/python/Products/ZCatalog/ZCatalog.py
index c74ef4b31..572cd1fa8 100644
--- a/lib/python/Products/ZCatalog/ZCatalog.py
+++ b/lib/python/Products/ZCatalog/ZCatalog.py
@@ -206,7 +206,7 @@ class ZCatalog(Folder, FindSupport, Persistent, Implicit):
                     # if an error happens here, the catalog will be in
                     # an unstable state.  If this happens, ignore the
                     # object.
-                    obj = self.resolve_url(url, REQUEST)
+                    obj = REQUEST.resolve_url(url, REQUEST)
                 except:
                     continue
                 
@@ -223,7 +223,7 @@ class ZCatalog(Folder, FindSupport, Persistent, Implicit):
         if urls:
             for url in urls:
                 try:
-                    obj = self.resolve_url(url, REQUEST)
+                    obj = REQUEST.resolve_url(url, REQUEST)
                 except:
                     continue
                 self.uncatalog_object(url)
@@ -236,13 +236,11 @@ class ZCatalog(Folder, FindSupport, Persistent, Implicit):
     def manage_catalogReindex(self, REQUEST):
         """ iterate over the whole catalog, deleting inexistent
         references and refreshing objects"""
-        items = tuple(self._catalog.uids.items())
+	items = tuple(self._catalog.uids.items())
 
-#        self._catalog.clear()
-
-        for path, i in items:
+	for path, i in items:
             try:
-                obj = self.resolve_url(path, REQUEST)
+                obj = self.getobject(i, REQUEST)
             except:
                 self.uncatalog_object(path)
             else:
@@ -250,7 +248,7 @@ class ZCatalog(Folder, FindSupport, Persistent, Implicit):
                 self.catalog_object(obj, path)
 
         message = "Catalog Reindexed"
-        return self.manage_main(self, REQUEST,
+        return self.manage_catalogView(self, REQUEST,
                                 manage_tabs_message=message)
 
 
@@ -287,7 +285,7 @@ class ZCatalog(Folder, FindSupport, Persistent, Implicit):
             self.catalog_object(n[1], n[0])
 
         message = "Objects Cataloged"
-        return self.manage_main(self, REQUEST,
+        return self.manage_catalogView(self, REQUEST,
                                 manage_tabs_message=message)
 
 
@@ -362,7 +360,8 @@ class ZCatalog(Folder, FindSupport, Persistent, Implicit):
         if REQUEST is None:
             REQUEST=self.REQUEST
         url='%s/%s' %(REQUEST.script, self.getpath(rid))
-        return REQUEST.clone().resolve_url(url)
+	obj = REQUEST.resolve_url(url)
+        return obj
 
     def schema(self):
         return self._catalog.schema.keys()
@@ -451,6 +450,7 @@ class ZCatalog(Folder, FindSupport, Persistent, Implicit):
 
 
     def resolve_url(self, path, REQUEST):
+	""" The use of this function is depricated """
         # Attempt to resolve a url into an object in the Zope
         # namespace. The url must be a fully-qualified url. The
         # method will return the requested object if it is found
@@ -487,8 +487,12 @@ class ZCatalog(Folder, FindSupport, Persistent, Implicit):
 
                 
             if name != os.path.split(path)[-1]:
-                return req.PARENTS[0]
+		result = req.PARENTS[0]
+		req.close()
+                return result
+	    req.close()
             return object
+	req.close()
         raise rsp.errmsg, sys.exc_value
 
 
-- 
2.30.9