You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by qi...@apache.org on 2022/05/05 02:48:52 UTC

[mesos] branch master updated: Fixed clang-tidy warnings due to capturing this in a deferred lambda.

This is an automated email from the ASF dual-hosted git repository.

qianzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git


The following commit(s) were added to refs/heads/master by this push:
     new cd71826ab Fixed clang-tidy warnings due to capturing this in a deferred lambda.
cd71826ab is described below

commit cd71826ab244db1f73e78fafe8a42181758a41e8
Author: Charles-Francois Natali <cf...@gmail.com>
AuthorDate: Fri Apr 29 22:47:22 2022 +0100

    Fixed clang-tidy warnings due to capturing this in a deferred lambda.
    
    Use `defer(self(), lambda)` instead to avoid the risk of use-after-free.
    
    See on the mesos-tidy CI job:
    ```
    /tmp/SRC/src/csi/v0_volume_manager.cpp:1078:13: warning: callback
    capturing this should be dispatched/deferred to a specific PID
    [mesos-this-capture]
          .then([=](const Map<string, string>& secrets) {
    ```
    
    Together with the recent fixes merged, this fix should allow the
    mesos-tidy CI job to be green again:
    https://ci-builds.apache.org/job/Mesos/job/Mesos-Tidybot/
---
 src/csi/v0_volume_manager.cpp | 4 ++--
 src/csi/v1_volume_manager.cpp | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/csi/v0_volume_manager.cpp b/src/csi/v0_volume_manager.cpp
index 3d5caa85f..170369184 100644
--- a/src/csi/v0_volume_manager.cpp
+++ b/src/csi/v0_volume_manager.cpp
@@ -1075,7 +1075,7 @@ Future<Nothing> VolumeManagerProcess::__publishVolume(const string& volumeId)
 
   if (!volumeState.node_stage_secrets().empty()) {
     rpcResult = resolveSecrets(volumeState.node_stage_secrets())
-      .then([=](const Map<string, string>& secrets) {
+      .then(process::defer(self(), [=](const Map<string, string>& secrets) {
         NodeStageVolumeRequest request_(request);
         *request_.mutable_node_stage_secrets() = secrets;
 
@@ -1083,7 +1083,7 @@ Future<Nothing> VolumeManagerProcess::__publishVolume(const string& volumeId)
             NODE_SERVICE,
             &Client::nodeStageVolume,
             std::move(request_));
-      });
+      }));
   } else {
     rpcResult =
       call(NODE_SERVICE, &Client::nodeStageVolume, std::move(request));
diff --git a/src/csi/v1_volume_manager.cpp b/src/csi/v1_volume_manager.cpp
index c50fda2d9..85f3ea756 100644
--- a/src/csi/v1_volume_manager.cpp
+++ b/src/csi/v1_volume_manager.cpp
@@ -1114,7 +1114,7 @@ Future<Nothing> VolumeManagerProcess::__publishVolume(const string& volumeId)
 
   if (!volumeState.node_stage_secrets().empty()) {
     rpcResult = resolveSecrets(volumeState.node_stage_secrets())
-      .then([=](const Map<string, string>& secrets) {
+      .then(process::defer(self(), [=](const Map<string, string>& secrets) {
         NodeStageVolumeRequest request_(request);
         *request_.mutable_secrets() = secrets;
 
@@ -1122,7 +1122,7 @@ Future<Nothing> VolumeManagerProcess::__publishVolume(const string& volumeId)
             NODE_SERVICE,
             &Client::nodeStageVolume,
             std::move(request_));
-      });
+      }));
   } else {
     rpcResult =
       call(NODE_SERVICE, &Client::nodeStageVolume, std::move(request));