diff --git a/source/FreeRTOS_ND.c b/source/FreeRTOS_ND.c index 43c68cd6a..439c5038a 100644 --- a/source/FreeRTOS_ND.c +++ b/source/FreeRTOS_ND.c @@ -573,6 +573,7 @@ IPv6_Address_t xTargetIPAddress; MACAddress_t xMultiCastMacAddress; NetworkBufferDescriptor_t * pxDescriptor = pxNetworkBuffer; + NetworkBufferDescriptor_t * pxNewDescriptor = NULL; if( ( pxEndPoint != NULL ) && ( pxEndPoint->bits.bIPv6 != pdFALSE_UNSIGNED ) ) { @@ -580,7 +581,9 @@ if( pxDescriptor->xDataLength < uxNeededSize ) { - pxDescriptor = pxDuplicateNetworkBufferWithDescriptor( pxDescriptor, uxNeededSize ); + pxNewDescriptor = pxDuplicateNetworkBufferWithDescriptor( pxDescriptor, uxNeededSize ); + vReleaseNetworkBufferAndDescriptor( pxDescriptor ); + pxDescriptor = pxNewDescriptor; } if( pxDescriptor != NULL ) diff --git a/source/FreeRTOS_RA.c b/source/FreeRTOS_RA.c index c98094752..e36d8aea0 100644 --- a/source/FreeRTOS_RA.c +++ b/source/FreeRTOS_RA.c @@ -138,6 +138,7 @@ NetworkBufferDescriptor_t * pxDescriptor = pxNetworkBuffer; IPv6_Address_t xSourceAddress; BaseType_t xHasLocal; + NetworkBufferDescriptor_t * pxNewDescriptor = NULL; configASSERT( pxEndPoint != NULL ); configASSERT( pxEndPoint->bits.bIPv6 != pdFALSE_UNSIGNED ); @@ -156,7 +157,9 @@ if( pxDescriptor->xDataLength < uxNeededSize ) { - pxDescriptor = pxDuplicateNetworkBufferWithDescriptor( pxDescriptor, uxNeededSize ); + pxNewDescriptor = pxDuplicateNetworkBufferWithDescriptor( pxDescriptor, uxNeededSize ); + vReleaseNetworkBufferAndDescriptor( pxDescriptor ); + pxDescriptor = pxNewDescriptor; } if( pxDescriptor != NULL ) diff --git a/test/unit-test/FreeRTOS_ND/FreeRTOS_ND_utest.c b/test/unit-test/FreeRTOS_ND/FreeRTOS_ND_utest.c index f0d0ddf93..d15d77445 100644 --- a/test/unit-test/FreeRTOS_ND/FreeRTOS_ND_utest.c +++ b/test/unit-test/FreeRTOS_ND/FreeRTOS_ND_utest.c @@ -722,6 +722,8 @@ void test_vNDAgeCache_NSIncorrectDataLen( void ) pxDuplicateNetworkBufferWithDescriptor_ExpectAnyArgsAndReturn( NULL ); + vReleaseNetworkBufferAndDescriptor_Expect( &xNetworkBuffer ); + vNDAgeCache(); TEST_ASSERT_EQUAL( xNDCache[ xUseEntry ].ucAge, xAgeDefault - 1 ); diff --git a/test/unit-test/FreeRTOS_RA/FreeRTOS_RA_utest.c b/test/unit-test/FreeRTOS_RA/FreeRTOS_RA_utest.c index d50af6b65..0d77637d7 100644 --- a/test/unit-test/FreeRTOS_RA/FreeRTOS_RA_utest.c +++ b/test/unit-test/FreeRTOS_RA/FreeRTOS_RA_utest.c @@ -149,6 +149,8 @@ void test_vNDSendRouterSolicitation_xHasLocal0( void ) pxDuplicateNetworkBufferWithDescriptor_ExpectAnyArgsAndReturn( NULL ); + vReleaseNetworkBufferAndDescriptor_Expect( pxNetworkBuffer ); + vNDSendRouterSolicitation( pxNetworkBuffer, &xIPAddress ); } @@ -188,6 +190,8 @@ void test_vNDSendRouterSolicitation_xHasLocal1( void ) pxDuplicateNetworkBufferWithDescriptor_ExpectAnyArgsAndReturn( NULL ); + vReleaseNetworkBufferAndDescriptor_Expect( pxNetworkBuffer ); + vNDSendRouterSolicitation( pxNetworkBuffer, &xIPAddress ); } @@ -223,6 +227,8 @@ void test_vNDSendRouterSolicitation_NullDesc( void ) pxDuplicateNetworkBufferWithDescriptor_ExpectAnyArgsAndReturn( NULL ); + vReleaseNetworkBufferAndDescriptor_Expect( pxNetworkBuffer ); + vNDSendRouterSolicitation( pxNetworkBuffer, &xIPAddress ); } @@ -1017,6 +1023,8 @@ void test_vRAProcess_eRAStateApply2( void ) /*usGenerateProtocolChecksum_ExpectAnyArgsAndReturn( ipCORRECT_CRC ); */ /*vReturnEthernetFrame_ExpectAnyArgs(); */ + vReleaseNetworkBufferAndDescriptor_Expect( &xNetworkBuffer ); + vDHCP_RATimerReload_ExpectAnyArgs(); /* pdFALSE for vRAProcessInit */