Index: gm/rebaseline_server/server.py |
=================================================================== |
--- gm/rebaseline_server/server.py (revision 12194) |
+++ gm/rebaseline_server/server.py (working copy) |
@@ -124,8 +124,8 @@ |
""" Create or update self.results, based on the expectations in |
self._expectations_dir and the latest actuals from skia-autogen. |
""" |
- with self.results_lock: |
- # self.results_lock prevents us from updating the actual GM results |
+ with self._svn_update_lock: |
+ # self._svn_update_lock prevents us from updating the actual GM results |
jcgregorio
2013/11/08 17:33:21
Comment seems wrong, doesn't this just prevent you
|
# in multiple threads simultaneously |
logging.info('Updating actual GM results in %s from SVN repo %s ...' % ( |
self._actuals_dir, ACTUALS_SVN_REPO)) |
@@ -135,12 +135,11 @@ |
actuals_repo.Checkout(ACTUALS_SVN_REPO, '.') |
else: |
actuals_repo.Update('.') |
- |
# We only update the expectations dir if the server was run with a |
# nonzero --reload argument; otherwise, we expect the user to maintain |
# her own expectations as she sees fit. |
# |
- # self.results_lock prevents us from updating the expected GM results |
+ # self._svn_update_lock prevents us from updating the expected GM results |
# in multiple threads simultaneously |
# |
# TODO(epoger): Use git instead of svn to check out expectations, since |
@@ -155,16 +154,22 @@ |
expectations_repo.Checkout(EXPECTATIONS_SVN_REPO, '.') |
else: |
expectations_repo.Update('.') |
+ # end of "with self._svn_update_lock:" |
- logging.info( |
+ logging.info( |
('Parsing results from actuals in %s and expectations in %s, ' |
+ 'and generating pixel diffs (may take a while) ...') % ( |
self._actuals_dir, self._expectations_dir)) |
- self.results = results.Results( |
+ new_results = results.Results( |
actuals_root=self._actuals_dir, |
expected_root=self._expectations_dir, |
generated_images_root=GENERATED_IMAGES_ROOT) |
+ # Make sure we don't update self.results while a client is in the middle |
+ # of reading from it. |
+ with self.results_lock: |
+ self.results = new_results |
+ |
def _result_reloader(self): |
""" If --reload argument was specified, reload results at the appropriate |
interval. |
@@ -175,6 +180,7 @@ |
def run(self): |
self.results_lock = thread.allocate_lock() |
jcgregorio
2013/11/08 17:33:21
Add docs here for what each lock is used for.
|
+ self._svn_update_lock = thread.allocate_lock() |
self.update_results() |
thread.start_new_thread(self._result_reloader, ()) |
@@ -189,7 +195,8 @@ |
host = '127.0.0.1' |
server_address = (host, self._port) |
http_server = BaseHTTPServer.HTTPServer(server_address, HTTPRequestHandler) |
- logging.info('Ready for requests on http://%s:%d' % (host, http_server.server_port)) |
+ logging.info('Ready for requests on http://%s:%d' % ( |
+ host, http_server.server_port)) |
http_server.serve_forever() |