Repository: incubator-impala Updated Branches: refs/heads/release-2.10.0 [created] 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/release-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) {
