Repository: incubator-impala
Updated Branches:
  refs/heads/branch-2.10.0 2a7c8b901 -> 23d79462d


IMPALA-5857: avoid invalid free of hedged read metrics

The libHdfs API documents that the output parameter is unchanged on
error, therefore we do not need to attempt to free it on error.

Testing:
The bug only reproduced under stress. I don't know how to trigger this
error path yet.

Change-Id: I93baf3b672429c0283d7f031ff302aca31e05be4
Reviewed-on: http://gerrit.cloudera.org:8080/7885
Reviewed-by: Sailesh Mukil <[email protected]>
Reviewed-by: Matthew Jacobs <[email protected]>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/2912a0f9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/2912a0f9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/2912a0f9

Branch: refs/heads/branch-2.10.0
Commit: 2912a0f9d9b32caf586b9383c7e027af3fe4c5c4
Parents: ebe8ddd
Author: Tim Armstrong <[email protected]>
Authored: Tue Aug 29 15:29:50 2017 -0700
Committer: Tim Armstrong <[email protected]>
Committed: Wed Aug 30 14:54:49 2017 -0700

----------------------------------------------------------------------
 be/src/runtime/disk-io-mgr-scan-range.cc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/2912a0f9/be/src/runtime/disk-io-mgr-scan-range.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/disk-io-mgr-scan-range.cc 
b/be/src/runtime/disk-io-mgr-scan-range.cc
index f9f96d0..df74fcc 100644
--- a/be/src/runtime/disk-io-mgr-scan-range.cc
+++ b/be/src/runtime/disk-io-mgr-scan-range.cc
@@ -350,14 +350,14 @@ void DiskIoMgr::ScanRange::Close() {
       // Update Hedged Read Metrics.
       // We call it only if the --use_hdfs_pread flag is set, to avoid having 
the
       // libhdfs client malloc and free a hdfsHedgedReadMetrics object 
unnecessarily
-      // otherwise.
+      // otherwise. 'hedged_metrics' is only set upon success.
       struct hdfsHedgedReadMetrics* hedged_metrics;
       int success = hdfsGetHedgedReadMetrics(fs_, &hedged_metrics);
       if (success == 0) {
         
ImpaladMetrics::HEDGED_READ_OPS->set_value(hedged_metrics->hedgedReadOps);
         
ImpaladMetrics::HEDGED_READ_OPS_WIN->set_value(hedged_metrics->hedgedReadOpsWin);
+        hdfsFreeHedgedReadMetrics(hedged_metrics);
       }
-      hdfsFreeHedgedReadMetrics(hedged_metrics);
     }
 
     if (num_remote_bytes_ > 0) {

Reply via email to