1
0
Fork 0

fixed more leaks

This commit is contained in:
Jan Steemann 2012-05-18 22:29:08 +02:00
parent 276cc78957
commit 56b270be18
3 changed files with 23 additions and 49 deletions

View File

@ -1424,37 +1424,38 @@ static TRI_aql_field_access_t* CreateAccessForNode (TRI_aql_context_t* const con
assert(field->_name._buffer); assert(field->_name._buffer);
assert(node); 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); fieldAccess = (TRI_aql_field_access_t*) TRI_Allocate(TRI_UNKNOWN_MEM_ZONE, sizeof(TRI_aql_field_access_t), false);
if (fieldAccess == NULL) { if (fieldAccess == NULL) {
// OOM // OOM
TRI_SetErrorContextAql(context, TRI_ERROR_OUT_OF_MEMORY, NULL); TRI_SetErrorContextAql(context, TRI_ERROR_OUT_OF_MEMORY, NULL);
TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, value);
return NULL; return NULL;
} }
fieldAccess->_fullName = TRI_DuplicateString(field->_name._buffer); fieldAccess->_fullName = TRI_DuplicateString(field->_name._buffer);
if (fieldAccess->_fullName == NULL) { if (fieldAccess->_fullName == NULL) {
TRI_SetErrorContextAql(context, TRI_ERROR_OUT_OF_MEMORY, NULL); TRI_SetErrorContextAql(context, TRI_ERROR_OUT_OF_MEMORY, NULL);
TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, value);
TRI_Free(TRI_UNKNOWN_MEM_ZONE, fieldAccess); TRI_Free(TRI_UNKNOWN_MEM_ZONE, fieldAccess);
return NULL; 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) { if (operator == AQL_NODE_OPERATOR_BINARY_EQ) {
// create an exact value access // create an exact value access
fieldAccess->_type = TRI_AQL_ACCESS_EXACT; fieldAccess->_type = TRI_AQL_ACCESS_EXACT;
fieldAccess->_value._value = value; 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) { else if (operator == AQL_NODE_OPERATOR_BINARY_LT) {
// create a single range access // create a single range access
fieldAccess->_type = TRI_AQL_ACCESS_RANGE_SINGLE; 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 /// @brief dump a single acces for debugging purposes
////////////////////////////////////////////////////////////////////////////////
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
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#if TRI_DEBUG_AQL #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("\nFIELD ACCESS\n- FIELD: %s\n",fieldAccess->_fullName);
printf("- TYPE: %s\n", AccessName(fieldAccess->_type)); 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 /// @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; size_t i, n;
assert(ranges); assert(ranges);
@ -1961,7 +1943,7 @@ void TRI_DumpRangesAql (const TRI_vector_pointer_t* const ranges) {
for (i = 0; i < n; ++i) { for (i = 0; i < n; ++i) {
TRI_aql_field_access_t* fieldAccess = TRI_AtVectorPointer(ranges, i); TRI_aql_field_access_t* fieldAccess = TRI_AtVectorPointer(ranges, i);
TRI_DumpRangeAql(fieldAccess); TRI_DumpAccessesAql(fieldAccess);
} }
} }
#endif #endif

View File

@ -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, int TRI_PickAccessAql (const TRI_aql_field_access_t* const,
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 #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 #endif
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View File

@ -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)); TRI_json_t* subValue = TRI_NodeJsonAql(context, TRI_AQL_NODE_MEMBER(node, i));
if (subValue) { if (subValue) {
TRI_PushBack2ListJson(result, subValue); TRI_PushBack3ListJson(TRI_UNKNOWN_MEM_ZONE, result, subValue);
TRI_Free(TRI_UNKNOWN_MEM_ZONE, 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)); TRI_json_t* subValue = TRI_NodeJsonAql(context, TRI_AQL_NODE_MEMBER(element, 0));
if (subValue) { if (subValue) {
TRI_Insert2ArrayJson(TRI_UNKNOWN_MEM_ZONE, TRI_Insert3ArrayJson(TRI_UNKNOWN_MEM_ZONE,
result, result,
TRI_AQL_NODE_STRING(element), TRI_AQL_NODE_STRING(element),
subValue); subValue);
TRI_Free(TRI_UNKNOWN_MEM_ZONE, subValue);
} }
} }
} }