Index: base.py
===================================================================
--- base.py	(revision 2553)
+++ base.py	(working copy)
@@ -4,7 +4,9 @@
 
 from django.db.backends import util
 from pysqlite2 import dbapi2 as Database
-
+from threading import currentThread  
+from django.utils.synch import RWLock 
+    
 DatabaseError = Database.DatabaseError
 
 Database.register_converter("bool", lambda s: str(s) == '1')
@@ -24,14 +26,22 @@
     def __init__(self):
         self.connection = None
         self.queries = []
-
+        self._lock = RWLock() 
+        self._active_threads = {} 
+    
     def cursor(self):
         from django.conf import settings
-        if self.connection is None:
-            self.connection = Database.connect(settings.DATABASE_NAME, detect_types=Database.PARSE_DECLTYPES)
-            # register extract and date_trun functions
-            self.connection.create_function("django_extract", 2, _sqlite_extract)
-            self.connection.create_function("django_date_trunc", 2, _sqlite_date_trunc)
+        self._lock.writer_enters()
+        try:
+            if self.connection is None or not currentThread() in self._active_threads:
+                connection = Database.connect(settings.DATABASE_NAME, detect_types=Database.PARSE_DECLTYPES)
+                # register extract and date_trun functions
+                connection.create_function("django_extract", 2, _sqlite_extract)
+                connection.create_function("django_date_trunc", 2, _sqlite_date_trunc)
+                self._active_threads[currentThread()] = connection
+            self.connection = self._active_threads[currentThread()]
+        finally:
+            self._lock.writer_leaves()
         cursor = self.connection.cursor(factory=SQLiteCursorWrapper)
         cursor.row_factory = utf8rowFactory
         if settings.DEBUG:
@@ -43,13 +53,23 @@
         self.connection.commit()
 
     def _rollback(self):
-        if self.connection:
-            self.connection.rollback()
-
+        self._lock.reader_enters() 
+        try: 
+            if self.connection: 
+                return self.connection.rollback() 
+        finally: 
+            self._lock.reader_leaves()
+            
     def close(self):
-        if self.connection is not None:
-            self.connection.close()
-            self.connection = None
+        self._lock.writer_enters()
+        try: 
+            if currentThread() in self._active_threads: 
+                self._active_threads.pop(currentThread()) 
+            if not self._active_threads and self.connection is not None: 
+                self.connection.close() 
+                self.connection = None 
+        finally: 
+            self._lock.writer_leaves() 
 
 class SQLiteCursorWrapper(Database.Cursor):
     """
