diff options
| author | Bent Bisballe Nyeng <deva@aasimon.org> | 2017-05-07 15:47:51 +0200 | 
|---|---|---|
| committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2017-05-07 15:47:51 +0200 | 
| commit | b92b7d517b51831f77c54da88974fbaca8bd763c (patch) | |
| tree | 0c45bd3e4ab0e88828761402ce8cf72df4ce3336 /src | |
| parent | 061b57ab6fd530f41d75a3b52dd254edc509a96b (diff) | |
Lazy free the nodata buffers on plugin removal.
Diffstat (limited to 'src')
| -rw-r--r-- | src/audiocache.cc | 5 | ||||
| -rw-r--r-- | src/audiocache.h | 2 | 
2 files changed, 6 insertions, 1 deletions
diff --git a/src/audiocache.cc b/src/audiocache.cc index e3be20b..2e9eaf8 100644 --- a/src/audiocache.cc +++ b/src/audiocache.cc @@ -277,7 +277,10 @@ void AudioCache::setFrameSize(std::size_t framesize)  	if(framesize > nodata_framesize)  	{ -		delete[] nodata; +		if(nodata) +		{ +			nodata_dirty.emplace_back(std::move(nodata)); // Store for later deletion. +		}  		nodata = new sample_t[framesize];  		nodata_framesize = framesize; diff --git a/src/audiocache.h b/src/audiocache.h index 54abcf7..9c6fa53 100644 --- a/src/audiocache.h +++ b/src/audiocache.h @@ -29,6 +29,7 @@  #include <string>  #include <list>  #include <vector> +#include <memory>  #include "audiotypes.h"  #include "audiofile.h" @@ -106,6 +107,7 @@ private:  	sample_t* nodata{nullptr};  	std::size_t nodata_framesize{0};  	std::size_t chunk_size{0}; +	std::list<std::unique_ptr<sample_t[]>> nodata_dirty;  	AudioCacheIDManager id_manager;  	AudioCacheEventHandler event_handler{id_manager};  | 
