Fixed bug with refreshing tokens in file Storage
diff --git a/Makefile b/Makefile
index 6c08a9a..f53fa87 100644
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,6 @@
 
 .PHONY: prerelease
 prerelease:
-	python2.4 runtests.py tests --exit_on_failure
 	python2.6 runtests.py tests --exit_on_failure
 	python2.7 runtests.py tests --exit_on_failure
 	-sudo rm -rf dist/
diff --git a/oauth2client/appengine.py b/oauth2client/appengine.py
index 2811069..68d5066 100644
--- a/oauth2client/appengine.py
+++ b/oauth2client/appengine.py
@@ -229,7 +229,7 @@
     self._property_name = property_name
     self._cache = cache
 
-  def get(self):
+  def locked_get(self):
     """Retrieve Credential from datastore.
 
     Returns:
@@ -248,7 +248,7 @@
 
     return credential
 
-  def put(self, credentials):
+  def locked_put(self, credentials):
     """Write a Credentials to the datastore.
 
     Args:
diff --git a/oauth2client/django_orm.py b/oauth2client/django_orm.py
index 581fe8e..5e511db 100644
--- a/oauth2client/django_orm.py
+++ b/oauth2client/django_orm.py
@@ -86,7 +86,7 @@
     self.key_value = key_value
     self.property_name = property_name
 
-  def get(self):
+  def locked_get(self):
     """Retrieve Credential from datastore.
 
     Returns:
@@ -102,7 +102,7 @@
         credential.set_store(self)
     return credential
 
-  def put(self, credentials):
+  def locked_put(self, credentials):
     """Write a Credentials to the datastore.
 
     Args:
diff --git a/oauth2client/file.py b/oauth2client/file.py
index 89140b8..60a6385 100644
--- a/oauth2client/file.py
+++ b/oauth2client/file.py
@@ -46,20 +46,32 @@
     self._filename = filename
     self._lock = threading.Lock()
 
-  def get(self):
+  def acquire_lock(self):
+    """Acquires any lock necessary to access this Storage.
+
+    This lock is not reentrant."""
+    self._lock.acquire()
+
+  def release_lock(self):
+    """Release the Storage lock.
+
+    Trying to release a lock that isn't held will result in a
+    RuntimeError.
+    """
+    self._lock.release()
+
+  def locked_get(self):
     """Retrieve Credential from file.
 
     Returns:
       oauth2client.client.Credentials
     """
-    self._lock.acquire()
     credentials = None
     try:
       f = open(self._filename, 'r')
       content = f.read()
       f.close()
     except IOError:
-      self._lock.release()
       return credentials
 
     # First try reading as JSON, and if that fails fall back to pickle.
@@ -74,19 +86,15 @@
         credentials.set_store(self)
       except:
         pass
-    finally:
-      self._lock.release()
 
     return credentials
 
-  def put(self, credentials):
+  def locked_put(self, credentials):
     """Write Credentials to file.
 
     Args:
       credentials: Credentials, the credentials to store.
     """
-    self._lock.acquire()
     f = open(self._filename, 'w')
     f.write(credentials.to_json())
     f.close()
-    self._lock.release()
diff --git a/samples/django_sample/buzz/views.py b/samples/django_sample/buzz/views.py
index d89af6d..c942aaf 100644
--- a/samples/django_sample/buzz/views.py
+++ b/samples/django_sample/buzz/views.py
@@ -24,8 +24,8 @@
   credential = storage.get()
   if credential is None or credential.invalid == True:
     flow = OAuth2WebServerFlow(
-        client_id='887851474342.apps.googleusercontent.com',
-        client_secret='6V9MHBUQqOQtxI7uXPIEnV8e',
+        client_id='837647042410.apps.googleusercontent.com',
+        client_secret='+SWwMCL9d8gWtzPRa1lXw5R8',
         scope='https://www.googleapis.com/auth/buzz',
         user_agent='buzz-django-sample/1.0',
         )
diff --git a/tests/test_oauth2client_file.py b/tests/test_oauth2client_file.py
index 05deaa0..5ada4a3 100644
--- a/tests/test_oauth2client_file.py
+++ b/tests/test_oauth2client_file.py
@@ -22,6 +22,7 @@
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
 
+import copy
 import os
 import pickle
 import unittest
@@ -38,6 +39,7 @@
     # Should work for Python2.6 and higher.
     import json as simplejson
 
+from apiclient.http import HttpMockSequence
 
 from oauth2client.client import OAuth2Credentials
 from oauth2client.client import AccessTokenCredentials
@@ -104,6 +106,32 @@
     self.assertEquals(data['_class'], 'OAuth2Credentials')
     self.assertEquals(data['_module'], 'oauth2client.client')
 
+  def test_token_refresh(self):
+    # Write a file with a pickled OAuth2Credentials.
+    access_token = 'foo'
+    client_id = 'some_client_id'
+    client_secret = 'cOuDdkfjxxnv+'
+    refresh_token = '1/0/a.df219fjls0'
+    token_expiry = datetime.datetime.utcnow()
+    token_uri = 'https://www.google.com/accounts/o8/oauth2/token'
+    user_agent = 'refresh_checker/1.0'
+
+    credentials = OAuth2Credentials(
+        access_token, client_id, client_secret,
+        refresh_token, token_expiry, token_uri,
+        user_agent)
+
+    s = Storage(FILENAME)
+    s.put(credentials)
+    credentials = s.get()
+    new_cred = copy.copy(credentials)
+    new_cred.access_token = 'bar'
+    s.put(new_cred)
+
+    credentials._refresh(lambda x: x)
+    self.assertEquals(credentials.access_token, 'bar')
+
+
   def test_access_token_credentials(self):
     access_token = 'foo'
     user_agent = 'refresh_checker/1.0'