Enqueue destroy shared image message under lock

Fix a potential bug where last_flush_id_ could be set out of order if
two threads call DestroySharedImage.

R=ericrk@chromium.org
TBR=piman@chromium.org

Bug: 870116, 914976, 882591
Change-Id: I974bff506211cafdc49440306203d6523cf614e5
Reviewed-on: https://chromium-review.googlesource.com/c/1376852
Reviewed-by: Eric Karl <ericrk@chromium.org>
Commit-Queue: Sunny Sachanandani <sunnyps@chromium.org>
Cr-Commit-Position: refs/heads/master@{#616512}
diff --git a/gpu/ipc/client/shared_image_interface_proxy.cc b/gpu/ipc/client/shared_image_interface_proxy.cc
index 5b4ceff..dc5247a 100644
--- a/gpu/ipc/client/shared_image_interface_proxy.cc
+++ b/gpu/ipc/client/shared_image_interface_proxy.cc
@@ -201,12 +201,11 @@
       new_token.SetVerifyFlush();
     }
   }
-  uint32_t flush_id = host_->EnqueueDeferredMessage(
-      GpuChannelMsg_DestroySharedImage(route_id_, mailbox),
-      std::move(dependencies));
   {
     base::AutoLock lock(lock_);
-    last_flush_id_ = flush_id;
+    last_flush_id_ = host_->EnqueueDeferredMessage(
+        GpuChannelMsg_DestroySharedImage(route_id_, mailbox),
+        std::move(dependencies));
   }
 }