diff --git a/coverage/sqldata.py b/coverage/sqldata.py index 613a280c5..2bb3035ac 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -971,22 +971,23 @@ def __init__(self, filename, debug): self.filename = filename self.nest = 0 self.con = None - - def _connect(self): - """Connect to the db and do universal initialization.""" - if self.con is not None: - return # SQLite on Windows on py2 won't open a file if the filename argument # has non-ascii characters in it. Opening a relative file name avoids # a problem if the current directory has non-ascii. try: - filename = os.path.relpath(self.filename) + self.connect_filename = os.path.relpath(self.filename) except ValueError: # ValueError can be raised under Windows when os.getcwd() returns a # folder from a different drive than the drive of self.filename in # which case we keep the original value of self.filename unchanged, # hoping that we won't face the non-ascii directory problem. - filename = self.filename + self.connect_filename = self.filename + + def _connect(self): + """Connect to the db and do universal initialization.""" + if self.con is not None: + return + # It can happen that Python switches threads while the tracer writes # data. The second thread will also try to write to the data, # effectively causing a nested context. However, given the idempotent @@ -994,7 +995,7 @@ def _connect(self): # is not a problem. if self.debug: self.debug.write("Connecting to {!r}".format(self.filename)) - self.con = sqlite3.connect(filename, check_same_thread=False) + self.con = sqlite3.connect(self.connect_filename, check_same_thread=False) self.con.create_function('REGEXP', 2, _regexp) # This pragma makes writing faster. It disables rollbacks, but we never need them.