From 56b270be18a7d2587fdd9aad0d29f36bf90ebf3d Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Fri, 18 May 2012 22:29:08 +0200 Subject: [PATCH] fixed more leaks --- Ahuacatl/ahuacatl-access-optimiser.c | 52 +++++++++------------------- Ahuacatl/ahuacatl-access-optimiser.h | 14 +++----- Ahuacatl/ahuacatl-conversions.c | 6 ++-- 3 files changed, 23 insertions(+), 49 deletions(-) diff --git a/Ahuacatl/ahuacatl-access-optimiser.c b/Ahuacatl/ahuacatl-access-optimiser.c index 7b6ad0bbf8..33b4ae60fd 100644 --- a/Ahuacatl/ahuacatl-access-optimiser.c +++ b/Ahuacatl/ahuacatl-access-optimiser.c @@ -1424,37 +1424,38 @@ static TRI_aql_field_access_t* CreateAccessForNode (TRI_aql_context_t* const con assert(field->_name._buffer); assert(node); - value = TRI_NodeJsonAql(context, node); - if (!value) { - TRI_SetErrorContextAql(context, TRI_ERROR_OUT_OF_MEMORY, NULL); - return NULL; - } - fieldAccess = (TRI_aql_field_access_t*) TRI_Allocate(TRI_UNKNOWN_MEM_ZONE, sizeof(TRI_aql_field_access_t), false); if (fieldAccess == NULL) { // OOM TRI_SetErrorContextAql(context, TRI_ERROR_OUT_OF_MEMORY, NULL); - TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, value); return NULL; } fieldAccess->_fullName = TRI_DuplicateString(field->_name._buffer); if (fieldAccess->_fullName == NULL) { TRI_SetErrorContextAql(context, TRI_ERROR_OUT_OF_MEMORY, NULL); - TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, value); TRI_Free(TRI_UNKNOWN_MEM_ZONE, fieldAccess); return NULL; } + + if (operator == AQL_NODE_OPERATOR_BINARY_NE) { + // create an all items access, and we're done + fieldAccess->_type = TRI_AQL_ACCESS_ALL; + return fieldAccess; + } + + // all other operation types require a value... + value = TRI_NodeJsonAql(context, node); + if (!value) { + TRI_SetErrorContextAql(context, TRI_ERROR_OUT_OF_MEMORY, NULL); + return NULL; + } if (operator == AQL_NODE_OPERATOR_BINARY_EQ) { // create an exact value access fieldAccess->_type = TRI_AQL_ACCESS_EXACT; fieldAccess->_value._value = value; } - else if (operator == AQL_NODE_OPERATOR_BINARY_NE) { - // create an all items access - fieldAccess->_type = TRI_AQL_ACCESS_ALL; - } else if (operator == AQL_NODE_OPERATOR_BINARY_LT) { // create a single range access fieldAccess->_type = TRI_AQL_ACCESS_RANGE_SINGLE; @@ -1893,30 +1894,11 @@ int TRI_PickAccessAql (const TRI_aql_field_access_t* const lhs, } //////////////////////////////////////////////////////////////////////////////// -/// @brief free a range vector -//////////////////////////////////////////////////////////////////////////////// - -void TRI_FreeRangesAql (TRI_vector_pointer_t* const ranges) { - size_t i, n; - - assert(ranges); - - n = ranges->_length; - for (i = 0; i < n; ++i) { - TRI_aql_field_access_t* fieldAccess = TRI_AtVectorPointer(ranges, i); - - TRI_FreeAccessAql(fieldAccess); - } - - TRI_FreeVectorPointer(TRI_UNKNOWN_MEM_ZONE, ranges); -} - -//////////////////////////////////////////////////////////////////////////////// -/// @brief dump a single range for debugging purposes +/// @brief dump a single acces for debugging purposes //////////////////////////////////////////////////////////////////////////////// #if TRI_DEBUG_AQL -void TRI_DumpRangeAql (const TRI_aql_field_access_t* const fieldAccess) { +void TRI_DumpAccessAql (const TRI_aql_field_access_t* const fieldAccess) { printf("\nFIELD ACCESS\n- FIELD: %s\n",fieldAccess->_fullName); printf("- TYPE: %s\n", AccessName(fieldAccess->_type)); @@ -1952,7 +1934,7 @@ void TRI_DumpRangeAql (const TRI_aql_field_access_t* const fieldAccess) { /// @brief dump ranges found for debugging purposes //////////////////////////////////////////////////////////////////////////////// -void TRI_DumpRangesAql (const TRI_vector_pointer_t* const ranges) { +void TRI_DumpAccessesAql (const TRI_vector_pointer_t* const ranges) { size_t i, n; assert(ranges); @@ -1961,7 +1943,7 @@ void TRI_DumpRangesAql (const TRI_vector_pointer_t* const ranges) { for (i = 0; i < n; ++i) { TRI_aql_field_access_t* fieldAccess = TRI_AtVectorPointer(ranges, i); - TRI_DumpRangeAql(fieldAccess); + TRI_DumpAccessesAql(fieldAccess); } } #endif diff --git a/Ahuacatl/ahuacatl-access-optimiser.h b/Ahuacatl/ahuacatl-access-optimiser.h index e1d09658cc..5aeefdeb1f 100644 --- a/Ahuacatl/ahuacatl-access-optimiser.h +++ b/Ahuacatl/ahuacatl-access-optimiser.h @@ -183,24 +183,18 @@ TRI_aql_field_access_t* TRI_CloneAccessAql (TRI_aql_context_t* const, int TRI_PickAccessAql (const TRI_aql_field_access_t* const, const TRI_aql_field_access_t* const); -//////////////////////////////////////////////////////////////////////////////// -/// @brief free a range vector -//////////////////////////////////////////////////////////////////////////////// - -void TRI_FreeRangesAql (TRI_vector_pointer_t* const); - #ifdef DEBUG_AQL //////////////////////////////////////////////////////////////////////////////// -/// @brief dump a single range for debugging purposes +/// @brief dump a single access for debugging purposes //////////////////////////////////////////////////////////////////////////////// -void TRI_DumpRangeAql (const TRI_aql_field_access_t* const); +void TRI_DumpAccessAql (const TRI_aql_field_access_t* const); //////////////////////////////////////////////////////////////////////////////// -/// @brief dump ranges found for debugging purposes +/// @brief dump accesses found for debugging purposes //////////////////////////////////////////////////////////////////////////////// -void TRI_DumpRangesAql (const TRI_vector_pointer_t* const); +void TRI_DumpAccessesAql (const TRI_vector_pointer_t* const); #endif //////////////////////////////////////////////////////////////////////////////// diff --git a/Ahuacatl/ahuacatl-conversions.c b/Ahuacatl/ahuacatl-conversions.c index fde93bb1ce..bf967f1c90 100644 --- a/Ahuacatl/ahuacatl-conversions.c +++ b/Ahuacatl/ahuacatl-conversions.c @@ -92,8 +92,7 @@ TRI_json_t* TRI_NodeJsonAql (TRI_aql_context_t* const context, TRI_json_t* subValue = TRI_NodeJsonAql(context, TRI_AQL_NODE_MEMBER(node, i)); if (subValue) { - TRI_PushBack2ListJson(result, subValue); - TRI_Free(TRI_UNKNOWN_MEM_ZONE, subValue); + TRI_PushBack3ListJson(TRI_UNKNOWN_MEM_ZONE, result, subValue); } } } @@ -110,11 +109,10 @@ TRI_json_t* TRI_NodeJsonAql (TRI_aql_context_t* const context, TRI_json_t* subValue = TRI_NodeJsonAql(context, TRI_AQL_NODE_MEMBER(element, 0)); if (subValue) { - TRI_Insert2ArrayJson(TRI_UNKNOWN_MEM_ZONE, + TRI_Insert3ArrayJson(TRI_UNKNOWN_MEM_ZONE, result, TRI_AQL_NODE_STRING(element), subValue); - TRI_Free(TRI_UNKNOWN_MEM_ZONE, subValue); } } }