You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@heron.apache.org by GitBox <gi...@apache.org> on 2019/04/30 21:54:55 UTC

[GitHub] [incubator-heron] dnrusakov commented on a change in pull request #3248: STREAMCOMP-2724: TMaster migrated to mostly use smart pointers instead of manual memory management

dnrusakov commented on a change in pull request #3248: STREAMCOMP-2724: TMaster migrated to mostly use smart pointers instead of manual memory management
URL: https://github.com/apache/incubator-heron/pull/3248#discussion_r279951638
 
 

 ##########
 File path: heron/stmgr/src/cpp/manager/instance-server.cpp
 ##########
 @@ -133,49 +135,50 @@ InstanceServer::~InstanceServer() {
   Stop();
   // Unregister and delete the metrics.
   for (auto immIter = instance_metric_map_.begin();
-      immIter != instance_metric_map_.end(); ++immIter) {
+            immIter != instance_metric_map_.end();) {
     sp_string instance_id = immIter->first;
+
     for (auto iter = instance_info_.begin(); iter != instance_info_.end(); ++iter) {
       if (iter->second->instance_->instance_id() != instance_id) continue;
       InstanceData* data = iter->second;
       Connection* iConn = data->conn_;
       if (!iConn) break;
       sp_string metric_name = MakeBackPressureCompIdMetricName(instance_id);
       metrics_manager_client_->unregister_metric(metric_name);
-      delete immIter->second;
     }
+
+    immIter = instance_metric_map_.erase(immIter);
 
 Review comment:
   @nwangtw Actually, it is inside for-loop. See, there are two nested for loops here and we call `instance_metric_map_.erase(immIter)` in the first loop (because the outer loop is traversing `instance_metric_map_`):
   
   ```
     for (auto immIter = instance_metric_map_.begin();
               immIter != instance_metric_map_.end();) {
       sp_string instance_id = immIter->first;
   
       for (auto iter = instance_info_.begin(); iter != instance_info_.end(); ++iter) {
         if (iter->second->instance_->instance_id() != instance_id) continue;
         InstanceData* data = iter->second;
         Connection* iConn = data->conn_;
         if (!iConn) break;
         sp_string metric_name = MakeBackPressureCompIdMetricName(instance_id);
         metrics_manager_client_->unregister_metric(metric_name);
       }
   
       immIter = instance_metric_map_.erase(immIter);
     }
   ```

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services