The BasePrefetchingDataLayer shouldn't join the thread
authorKai Li <kaili_kloud@163.com>
Thu, 28 Aug 2014 09:32:46 +0000 (17:32 +0800)
committerKai Li <kaili_kloud@163.com>
Wed, 3 Sep 2014 05:25:21 +0000 (13:25 +0800)
include/caffe/data_layers.hpp
src/caffe/layers/base_data_layer.cpp
src/caffe/layers/data_layer.cpp
src/caffe/layers/image_data_layer.cpp
src/caffe/layers/window_data_layer.cpp

index 8651ece..4f599e4 100644 (file)
@@ -60,7 +60,7 @@ class BasePrefetchingDataLayer :
  public:
   explicit BasePrefetchingDataLayer(const LayerParameter& param)
       : BaseDataLayer<Dtype>(param) {}
-  virtual ~BasePrefetchingDataLayer();
+  virtual ~BasePrefetchingDataLayer() {}
 
   virtual void Forward_cpu(const vector<Blob<Dtype>*>& bottom,
       vector<Blob<Dtype>*>* top);
@@ -206,7 +206,7 @@ class ImageDataLayer : public BasePrefetchingDataLayer<Dtype> {
  public:
   explicit ImageDataLayer(const LayerParameter& param)
       : BasePrefetchingDataLayer<Dtype>(param) {}
-  virtual ~ImageDataLayer() {}
+  virtual ~ImageDataLayer();
   virtual void DataLayerSetUp(const vector<Blob<Dtype>*>& bottom,
       vector<Blob<Dtype>*>* top);
 
@@ -273,7 +273,7 @@ class WindowDataLayer : public BasePrefetchingDataLayer<Dtype> {
  public:
   explicit WindowDataLayer(const LayerParameter& param)
       : BasePrefetchingDataLayer<Dtype>(param) {}
-  virtual ~WindowDataLayer() {}
+  virtual ~WindowDataLayer();
   virtual void DataLayerSetUp(const vector<Blob<Dtype>*>& bottom,
       vector<Blob<Dtype>*>* top);
 
index 8310710..b25f087 100644 (file)
@@ -16,11 +16,6 @@ void BaseDataLayer<Dtype>::LayerSetUp(const vector<Blob<Dtype>*>& bottom,
 }
 
 template <typename Dtype>
-BasePrefetchingDataLayer<Dtype>::~BasePrefetchingDataLayer<Dtype>() {
-  JoinPrefetchThread();
-}
-
-template <typename Dtype>
 void BasePrefetchingDataLayer<Dtype>::CreatePrefetchThread() {
   this->phase_ = Caffe::phase();
   this->data_transformer_.InitRand();
index fbf2d91..b57ca58 100644 (file)
@@ -79,6 +79,7 @@ void DataLayer<Dtype>::InternalThreadEntry() {
 
 template <typename Dtype>
 DataLayer<Dtype>::~DataLayer<Dtype>() {
+  this->JoinPrefetchThread();
   // clean up the database resources
   switch (this->layer_param_.data_param().backend()) {
   case DataParameter_DB_LEVELDB:
index 687beb8..72b1483 100644 (file)
@@ -54,6 +54,11 @@ void ImageDataLayer<Dtype>::InternalThreadEntry() {
 }
 
 template <typename Dtype>
+ImageDataLayer<Dtype>::~ImageDataLayer<Dtype>() {
+  this->JoinPrefetchThread();
+}
+
+template <typename Dtype>
 void ImageDataLayer<Dtype>::DataLayerSetUp(const vector<Blob<Dtype>*>& bottom,
       vector<Blob<Dtype>*>* top) {
   const int new_height = this->layer_param_.image_data_param().new_height();
index f434982..f7e8186 100644 (file)
@@ -238,6 +238,11 @@ void WindowDataLayer<Dtype>::InternalThreadEntry() {
 }
 
 template <typename Dtype>
+WindowDataLayer<Dtype>::~WindowDataLayer<Dtype>() {
+  this->JoinPrefetchThread();
+}
+
+template <typename Dtype>
 void WindowDataLayer<Dtype>::DataLayerSetUp(const vector<Blob<Dtype>*>& bottom,
       vector<Blob<Dtype>*>* top) {
   // LayerSetUp runs through the window_file and creates two structures