| Index: gm/rebaseline_server/server.py
 | 
| diff --git a/gm/rebaseline_server/server.py b/gm/rebaseline_server/server.py
 | 
| index e8dbb6be732a338ec9f83015b7d2b090ee3857e1..d1d9c855afc3fe5d7f56f5be1cfd3e2a4e43c273 100755
 | 
| --- a/gm/rebaseline_server/server.py
 | 
| +++ b/gm/rebaseline_server/server.py
 | 
| @@ -157,8 +157,8 @@ class Server(object):
 | 
|  
 | 
|    @property
 | 
|    def results(self):
 | 
| -    """ Returns the most recently generated results, or None if update_results()
 | 
| -    has not been called yet. """
 | 
| +    """ Returns the most recently generated results, or None if we don't have
 | 
| +    any valid results (update_results() has not completed yet). """
 | 
|      return self._results
 | 
|  
 | 
|    @property
 | 
| @@ -178,15 +178,22 @@ class Server(object):
 | 
|      results. """
 | 
|      return self._reload_seconds
 | 
|  
 | 
| -  def update_results(self):
 | 
| +  def update_results(self, invalidate=False):
 | 
|      """ Create or update self._results, based on the expectations in
 | 
|      EXPECTATIONS_DIR and the latest actuals from skia-autogen.
 | 
|  
 | 
|      We hold self.results_rlock while we do this, to guarantee that no other
 | 
|      thread attempts to update either self._results or the underlying files at
 | 
|      the same time.
 | 
| +
 | 
| +    Args:
 | 
| +      invalidate: if True, invalidate self._results immediately upon entry;
 | 
| +                  otherwise, we will let readers see those results until we
 | 
| +                  replace them
 | 
|      """
 | 
|      with self.results_rlock:
 | 
| +      if invalidate:
 | 
| +        self._results = None
 | 
|        logging.info('Updating actual GM results in %s from SVN repo %s ...' % (
 | 
|            self._actuals_dir, ACTUALS_SVN_REPO))
 | 
|        self._actuals_repo.Update('.')
 | 
| @@ -445,8 +452,11 @@ class HTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
 | 
|                          'results and submit the modifications again.' %
 | 
|                          oldResultsType)
 | 
|        _SERVER.results.edit_expectations(data['modifications'])
 | 
| -      # Read the updated results back from disk.
 | 
| -      _SERVER.update_results()
 | 
| +
 | 
| +    # Read the updated results back from disk.
 | 
| +    # We can do this in a separate thread; we should return our success message
 | 
| +    # to the UI as soon as possible.
 | 
| +    thread.start_new_thread(_SERVER.update_results, (True,))
 | 
|  
 | 
|    def redirect_to(self, url):
 | 
|      """ Redirect the HTTP client to a different url.
 | 
| 
 |