@@ -134,15 +134,30 @@ class SynchronizedNBuffer : public NBuffer<T> {
134
134
public:
135
135
SynchronizedNBuffer (int bufferSize, int bufferCount, int writeMaxWait=portMAX_DELAY, int readMaxWait=portMAX_DELAY) {
136
136
TRACED ();
137
+ read_max_wait = readMaxWait;
138
+ write_max_wait = writeMaxWait;
139
+ resize (bufferSize, bufferCount);
140
+ }
141
+ ~SynchronizedNBuffer (){
142
+ cleanup ();
143
+ }
144
+
145
+ void resize (int bufferSize, int bufferCount) {
146
+ TRACED ();
147
+ if (buffer_size == bufferSize && buffer_count == bufferCount){
148
+ return ;
149
+ }
150
+
137
151
max_size = bufferSize * bufferCount;
138
152
NBuffer<T>::buffer_count = bufferCount;
139
153
NBuffer<T>::buffer_size = bufferSize;
140
154
155
+ cleanup ();
141
156
available_buffers.resize (bufferCount);
142
157
filled_buffers.resize (bufferCount);
143
158
144
- setReadMaxWait (readMaxWait );
145
- setWriteMaxWait (writeMaxWait );
159
+ setReadMaxWait (read_max_wait );
160
+ setWriteMaxWait (write_max_wait );
146
161
147
162
// setup buffers
148
163
NBuffer<T>::write_buffer_count = 0 ;
@@ -174,6 +189,19 @@ class SynchronizedNBuffer : public NBuffer<T> {
174
189
QueueRTOS<BaseBuffer<T>*> available_buffers{0 ,portMAX_DELAY,0 };
175
190
QueueRTOS<BaseBuffer<T>*> filled_buffers{0 ,portMAX_DELAY,0 };
176
191
size_t max_size;
192
+ size_t read_max_wait, write_max_wait;
193
+ int buffer_size = 0 , buffer_count = 0 ;
194
+
195
+ // / Removes all allocated buffers
196
+ void cleanup (){
197
+ BaseBuffer<T>* buffer = nullptr ;;
198
+ while (available_buffers.dequeue (buffer)){
199
+ delete buffer;
200
+ }
201
+ while (filled_buffers.dequeue (buffer)){
202
+ delete buffer;
203
+ }
204
+ }
177
205
178
206
BaseBuffer<T> *getNextAvailableBuffer () {
179
207
TRACED ();
0 commit comments