From 55bc149efb069f15ea0c8bdfdfb38022d5ec6266 Mon Sep 17 00:00:00 2001 From: Jiaming Yuan Date: Thu, 3 Jan 2019 23:40:40 +0800 Subject: [PATCH] Fix sparse page segfault. (#4040) * Remove usage of raw pointers in SparsePageSource. --- src/data/sparse_page_source.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/data/sparse_page_source.cc b/src/data/sparse_page_source.cc index 9c15219dc..b7164e51a 100644 --- a/src/data/sparse_page_source.cc +++ b/src/data/sparse_page_source.cc @@ -59,19 +59,19 @@ SparsePageSource::SparsePageSource(const std::string& cache_info, for (size_t i = 0; i < cache_shards.size(); ++i) { std::string name_row = cache_shards[i] + page_type; files_[i].reset(dmlc::SeekStream::CreateForRead(name_row.c_str())); - dmlc::SeekStream* fi = files_[i].get(); + std::unique_ptr& fi = files_[i]; std::string format; CHECK(fi->Read(&format)) << "Invalid page format"; formats_[i].reset(SparsePageFormat::Create(format)); - SparsePageFormat* fmt = formats_[i].get(); + std::unique_ptr& fmt = formats_[i]; size_t fbegin = fi->Tell(); prefetchers_[i].reset(new dmlc::ThreadedIter(4)); - prefetchers_[i]->Init([fi, fmt] (SparsePage** dptr) { + prefetchers_[i]->Init([&fi, &fmt] (SparsePage** dptr) { if (*dptr == nullptr) { *dptr = new SparsePage(); } - return fmt->Read(*dptr, fi); - }, [fi, fbegin] () { fi->Seek(fbegin); }); + return fmt->Read(*dptr, fi.get()); + }, [&fi, fbegin] () { fi->Seek(fbegin); }); } }