From: Jeff Donahue Date: Mon, 12 Jan 2015 22:27:06 +0000 (-0800) Subject: DataLayer and HDF5OutputLayer can be constructed and destroyed without X-Git-Tag: submit/tizen/20180823.020014~572^2~36^2~11 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=794cd7fbca367c27ab4303c2f6e05683eed3c117;p=platform%2Fupstream%2Fcaffeonacl.git DataLayer and HDF5OutputLayer can be constructed and destroyed without errors --- diff --git a/include/caffe/data_layers.hpp b/include/caffe/data_layers.hpp index e55a0bb..cdf2d18 100644 --- a/include/caffe/data_layers.hpp +++ b/include/caffe/data_layers.hpp @@ -181,10 +181,11 @@ class HDF5DataLayer : public Layer { template class HDF5OutputLayer : public Layer { public: - explicit HDF5OutputLayer(const LayerParameter& param); + explicit HDF5OutputLayer(const LayerParameter& param) + : Layer(param), file_opened_(false) {} virtual ~HDF5OutputLayer(); virtual void LayerSetUp(const vector*>& bottom, - const vector*>& top) {} + const vector*>& top); // Data layers have no bottoms, so reshaping is trivial. virtual void Reshape(const vector*>& bottom, const vector*>& top) {} @@ -207,6 +208,7 @@ class HDF5OutputLayer : public Layer { const vector& propagate_down, const vector*>& bottom); virtual void SaveBlobs(); + bool file_opened_; std::string file_name_; hid_t file_id_; Blob data_blob_; diff --git a/src/caffe/layers/hdf5_output_layer.cpp b/src/caffe/layers/hdf5_output_layer.cpp index d2fdeff..f63375c 100644 --- a/src/caffe/layers/hdf5_output_layer.cpp +++ b/src/caffe/layers/hdf5_output_layer.cpp @@ -12,19 +12,21 @@ namespace caffe { template -HDF5OutputLayer::HDF5OutputLayer(const LayerParameter& param) - : Layer(param), - file_name_(param.hdf5_output_param().file_name()) { - /* create a HDF5 file */ +void HDF5OutputLayer::LayerSetUp(const vector*>& bottom, + const vector*>& top) { + file_name_ = this->layer_param_.hdf5_output_param().file_name(); file_id_ = H5Fcreate(file_name_.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); CHECK_GE(file_id_, 0) << "Failed to open HDF5 file" << file_name_; + file_opened_ = true; } template HDF5OutputLayer::~HDF5OutputLayer() { - herr_t status = H5Fclose(file_id_); - CHECK_GE(status, 0) << "Failed to close HDF5 file " << file_name_; + if (file_opened_) { + herr_t status = H5Fclose(file_id_); + CHECK_GE(status, 0) << "Failed to close HDF5 file " << file_name_; + } } template diff --git a/src/caffe/test/test_hdf5_output_layer.cpp b/src/caffe/test/test_hdf5_output_layer.cpp index 2e8f096..a23034f 100644 --- a/src/caffe/test/test_hdf5_output_layer.cpp +++ b/src/caffe/test/test_hdf5_output_layer.cpp @@ -92,8 +92,8 @@ TYPED_TEST(HDF5OutputLayerTest, TestForward) { // the output hdf5 file is closed. { HDF5OutputLayer layer(param); - EXPECT_EQ(layer.file_name(), this->output_file_name_); layer.SetUp(this->blob_bottom_vec_, this->blob_top_vec_); + EXPECT_EQ(layer.file_name(), this->output_file_name_); layer.Forward(this->blob_bottom_vec_, this->blob_top_vec_); } file_id = H5Fopen(this->output_file_name_.c_str(), H5F_ACC_RDONLY,