From 1132f5f896e1efc5ff177bab377e34d5cd1a1ebd Mon Sep 17 00:00:00 2001 From: "szager@chromium.org" Date: Sat, 23 Aug 2014 01:57:59 +0000 Subject: [PATCH] Add thread locking around GetCachePath(). BUG=406662 R=cmp@chromium.org, agable@chromium.org Review URL: https://codereview.chromium.org/469073004 git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@291569 0039d316-1c4b-4281-b951-d872f2087c98 --- git_cache.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/git_cache.py b/git_cache.py index d36686485f..1ac9a41c23 100755 --- a/git_cache.py +++ b/git_cache.py @@ -12,6 +12,7 @@ import optparse import os import re import tempfile +import threading import time import shutil import subprocess @@ -144,6 +145,7 @@ class Mirror(object): gsutil_exe = os.path.join( os.path.dirname(os.path.abspath(__file__)), 'third_party', 'gsutil', 'gsutil') + cachepath_lock = threading.Lock() def __init__(self, url, refs=None, print_func=None): self.url = url @@ -202,6 +204,7 @@ class Mirror(object): @classmethod def GetCachePath(cls): + cls.cachepath_lock.acquire() if not hasattr(cls, 'cachepath'): try: cachepath = subprocess.check_output( @@ -209,8 +212,10 @@ class Mirror(object): except subprocess.CalledProcessError: cachepath = None if not cachepath: + cls.cachepath_lock.release() raise RuntimeError('No global cache.cachepath git configuration found.') setattr(cls, 'cachepath', cachepath) + cls.cachepath_lock.release() return getattr(cls, 'cachepath') def RunGit(self, cmd, **kwargs):