]> granicus.if.org Git - python/commitdiff
Merged revisions 72045 via svnmerge from
authorAntoine Pitrou <solipsis@pitrou.net>
Mon, 27 Apr 2009 21:01:13 +0000 (21:01 +0000)
committerAntoine Pitrou <solipsis@pitrou.net>
Mon, 27 Apr 2009 21:01:13 +0000 (21:01 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r72045 | antoine.pitrou | 2009-04-27 22:50:20 +0200 (lun., 27 avril 2009) | 5 lines

  Issue #5853: calling a function of the mimetypes module from several threads
  at once could hit the recursion limit if the mimetypes database hadn't been
  initialized before.
........

Lib/mimetypes.py
Misc/NEWS

index 6212e784194c5edee2ae5e132ff5843e87fcdb5d..f0a5ecf7bba69e22d088efb1b6766a1a72e7fc1a 100644 (file)
@@ -44,6 +44,7 @@ knownfiles = [
     ]
 
 inited = False
+_db = None
 
 
 class MimeTypes:
@@ -237,9 +238,9 @@ def guess_type(url, strict=True):
     Optional `strict' argument when false adds a bunch of commonly found, but
     non-standard types.
     """
-    if not inited:
+    if _db is None:
         init()
-    return guess_type(url, strict)
+    return _db.guess_type(url, strict)
 
 
 def guess_all_extensions(type, strict=True):
@@ -255,9 +256,9 @@ def guess_all_extensions(type, strict=True):
     Optional `strict' argument when false adds a bunch of commonly found,
     but non-standard types.
     """
-    if not inited:
+    if _db is None:
         init()
-    return guess_all_extensions(type, strict)
+    return _db.guess_all_extensions(type, strict)
 
 def guess_extension(type, strict=True):
     """Guess the extension for a file based on its MIME type.
@@ -271,9 +272,9 @@ def guess_extension(type, strict=True):
     Optional `strict' argument when false adds a bunch of commonly found,
     but non-standard types.
     """
-    if not inited:
+    if _db is None:
         init()
-    return guess_extension(type, strict)
+    return _db.guess_extension(type, strict)
 
 def add_type(type, ext, strict=True):
     """Add a mapping between a type and an extension.
@@ -287,16 +288,15 @@ def add_type(type, ext, strict=True):
     list of standard types, else to the list of non-standard
     types.
     """
-    if not inited:
+    if _db is None:
         init()
-    return add_type(type, ext, strict)
+    return _db.add_type(type, ext, strict)
 
 
 def init(files=None):
-    global guess_all_extensions, guess_extension, guess_type
     global suffix_map, types_map, encodings_map, common_types
-    global add_type, inited
-    inited = True
+    global inited, _db
+    inited = True    # so that MimeTypes.__init__() doesn't call us again
     db = MimeTypes()
     if files is None:
         files = knownfiles
@@ -306,11 +306,9 @@ def init(files=None):
     encodings_map = db.encodings_map
     suffix_map = db.suffix_map
     types_map = db.types_map[True]
-    guess_all_extensions = db.guess_all_extensions
-    guess_extension = db.guess_extension
-    guess_type = db.guess_type
-    add_type = db.add_type
     common_types = db.types_map[False]
+    # Make the DB a global variable now that it is fully initialized
+    _db = db
 
 
 def read_mime_types(file):
index e44f22ab8fb7a367bf3168df52f80ab7610a5ee0..d5a6a16462a81c56fd02c8c4172658a8cf3f1f20 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -27,6 +27,10 @@ Core and Builtins
 Library
 -------
 
+- Issue #5853: calling a function of the mimetypes module from several threads
+  at once could hit the recursion limit if the mimetypes database hadn't been
+  initialized before.
+
 - Issue #5041: ctypes does now allow pickling wide character.
 
 - Issue #5768: Fixed bug in Unicode output logic and test case for same.