mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Fixed DynamicJsonBuffer::clear() not resetting allocation size (fixes #561)
				
					
				
			This commit is contained in:
		| @@ -1,6 +1,11 @@ | ||||
| ArduinoJson: change log | ||||
| ======================= | ||||
|  | ||||
| HEAD | ||||
| ---- | ||||
|  | ||||
| * Fixed `DynamicJsonBuffer::clear()` not resetting allocation size (issue #561) | ||||
|  | ||||
| v5.11.1 | ||||
| ------- | ||||
|  | ||||
|   | ||||
| @@ -52,7 +52,7 @@ class DynamicJsonBufferBase | ||||
|       : _head(NULL), _nextBlockCapacity(initialSize) {} | ||||
|  | ||||
|   ~DynamicJsonBufferBase() { | ||||
|     freeAllBlocks(); | ||||
|     clear(); | ||||
|   } | ||||
|  | ||||
|   // Gets the number of bytes occupied in the buffer | ||||
| @@ -71,7 +71,13 @@ class DynamicJsonBufferBase | ||||
|   // Resets the buffer. | ||||
|   // USE WITH CAUTION: this invalidates all previously allocated data | ||||
|   void clear() { | ||||
|     freeAllBlocks(); | ||||
|     Block* currentBlock = _head; | ||||
|     while (currentBlock != NULL) { | ||||
|       _nextBlockCapacity = currentBlock->capacity; | ||||
|       Block* nextBlock = currentBlock->next; | ||||
|       _allocator.deallocate(currentBlock); | ||||
|       currentBlock = nextBlock; | ||||
|     } | ||||
|     _head = 0; | ||||
|   } | ||||
|  | ||||
| @@ -144,16 +150,6 @@ class DynamicJsonBufferBase | ||||
|     return true; | ||||
|   } | ||||
|  | ||||
|   void freeAllBlocks() { | ||||
|     Block* currentBlock = _head; | ||||
|  | ||||
|     while (currentBlock != NULL) { | ||||
|       Block* nextBlock = currentBlock->next; | ||||
|       _allocator.deallocate(currentBlock); | ||||
|       currentBlock = nextBlock; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   TAllocator _allocator; | ||||
|   Block* _head; | ||||
|   size_t _nextBlockCapacity; | ||||
|   | ||||
| @@ -46,7 +46,7 @@ TEST_CASE("DynamicJsonBuffer::alloc()") { | ||||
|     REQUIRE(allocatorLog.str() == "A1A2FF"); | ||||
|   } | ||||
|  | ||||
|   SECTION("Keeps increasing allocation size after clear") { | ||||
|   SECTION("Resets allocation size after clear()") { | ||||
|     allocatorLog.str(""); | ||||
|     { | ||||
|       DynamicJsonBufferBase<SpyingAllocator> buffer(1); | ||||
| @@ -55,7 +55,7 @@ TEST_CASE("DynamicJsonBuffer::alloc()") { | ||||
|       buffer.clear(); | ||||
|       buffer.alloc(1); | ||||
|     } | ||||
|     REQUIRE(allocatorLog.str() == "A1A2FFA4F"); | ||||
|     REQUIRE(allocatorLog.str() == "A1A2FFA1F"); | ||||
|   } | ||||
|  | ||||
|   SECTION("Makes a big allocation when needed") { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user