Remove a memory leak in enum next()/prev() code.
Some of the last changes I added to the enumeration next()/prev() code introduced a memory leak under some situations. This patch fixes the leak by freeing the iterator before the new one is created.
This commit is contained in:
parent
8977248ee2
commit
59c4209347
|
|
@ -306,6 +306,9 @@ static PLI_INT32 ivl_enum_method_next_prev_calltf(PLI_BYTE8*name)
|
||||||
if (strcmp(name, "$ivl_enum_method$next") == 0) {
|
if (strcmp(name, "$ivl_enum_method$next") == 0) {
|
||||||
/* Check to see if we need to wrap to the beginning. */
|
/* Check to see if we need to wrap to the beginning. */
|
||||||
if (loc + count > enum_size) {
|
if (loc + count > enum_size) {
|
||||||
|
/* Free the current iterator before creating a new
|
||||||
|
* one that is at the beginning of the list. */
|
||||||
|
vpi_free_object(enum_list);
|
||||||
enum_list = vpi_iterate(vpiEnumConst, arg_enum);
|
enum_list = vpi_iterate(vpiEnumConst, arg_enum);
|
||||||
assert(enum_list);
|
assert(enum_list);
|
||||||
count -= (enum_size - loc);
|
count -= (enum_size - loc);
|
||||||
|
|
@ -319,7 +322,10 @@ static PLI_INT32 ivl_enum_method_next_prev_calltf(PLI_BYTE8*name)
|
||||||
count = enum_size - count;
|
count = enum_size - count;
|
||||||
} else {
|
} else {
|
||||||
/* The element we want is before the current
|
/* The element we want is before the current
|
||||||
* element (at the beginning of the list). */
|
* element (at the beginning of the list). Free
|
||||||
|
* the current iterator before creating a new
|
||||||
|
* one that is at the beginning of the list. */
|
||||||
|
vpi_free_object(enum_list);
|
||||||
enum_list = vpi_iterate(vpiEnumConst, arg_enum);
|
enum_list = vpi_iterate(vpiEnumConst, arg_enum);
|
||||||
assert(enum_list);
|
assert(enum_list);
|
||||||
count = loc - count;
|
count = loc - count;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue