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.
diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py
index 6212e78..f0a5ecf 100644
--- a/Lib/mimetypes.py
+++ b/Lib/mimetypes.py
@@ -44,6 +44,7 @@
     ]
 
 inited = False
+_db = None
 
 
 class MimeTypes:
@@ -237,9 +238,9 @@
     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 @@
     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 @@
     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 @@
     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 @@
     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):
diff --git a/Misc/NEWS b/Misc/NEWS
index 082612e..24ec692 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -255,6 +255,10 @@
 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 #5854: Updated __all__ to include some missing names and remove some
   names which should not be exported.