diff --git a/src/shogun/features/streaming/StreamingDenseFeatures.cpp b/src/shogun/features/streaming/StreamingDenseFeatures.cpp index d47a1ec49d0..1db8f72ac5a 100644 --- a/src/shogun/features/streaming/StreamingDenseFeatures.cpp +++ b/src/shogun/features/streaming/StreamingDenseFeatures.cpp @@ -70,6 +70,7 @@ template void CStreamingDenseFeatures::reset_stream() parser.exit_parser(); parser.init(working_file, has_labels, 1); parser.set_free_vector_after_release(false); + parser.set_free_vectors_on_destruct(false); parser.start_parser(); } } diff --git a/src/shogun/io/streaming/InputParser.h b/src/shogun/io/streaming/InputParser.h index 574bf764eab..d2a3b999019 100644 --- a/src/shogun/io/streaming/InputParser.h +++ b/src/shogun/io/streaming/InputParser.h @@ -403,6 +403,7 @@ template else example_type = E_UNLABELLED; + SG_UNREF(examples_ring); examples_ring = new CParseBuffer(size); SG_REF(examples_ring); diff --git a/tests/unit/features/StreamingDenseFeatures_unittest.cc b/tests/unit/features/StreamingDenseFeatures_unittest.cc index c64f8c1cd88..b3f2976d5e4 100644 --- a/tests/unit/features/StreamingDenseFeatures_unittest.cc +++ b/tests/unit/features/StreamingDenseFeatures_unittest.cc @@ -92,3 +92,33 @@ TEST(StreamingDenseFeaturesTest, example_reading_from_features) SG_UNREF(feats); } + +TEST(StreamingDenseFeaturesTest, reset_stream) +{ + index_t n=20; + index_t dim=2; + + SGMatrix data(dim,n); + for (index_t i=0; istd_normal_distrib(); + + CDenseFeatures* orig_feats=new CDenseFeatures(data); + CStreamingDenseFeatures* feats=new CStreamingDenseFeatures(orig_feats); + + feats->start_parser(); + + CDenseFeatures* streamed=dynamic_cast*>(feats->get_streamed_features(n)); + ASSERT_TRUE(streamed!=nullptr); + ASSERT_TRUE(orig_feats->equals(streamed)); + SG_UNREF(streamed); + + feats->reset_stream(); + + streamed=dynamic_cast*>(feats->get_streamed_features(n)); + ASSERT_TRUE(streamed!=nullptr); + ASSERT_TRUE(orig_feats->equals(streamed)); + SG_UNREF(streamed); + + feats->end_parser(); + SG_UNREF(feats); +}