
On Tue, Jan 29, 2008 at 11:32:04AM +0900, Hiroyuki Kaguchi wrote:
There are two logic error and a unnecessary else-statement in virHashRemoveSet function.
This patch fix the following. (1/3) The logic error that use released memory area. (2/3) The logic error that doesn't remove elements. (3/3) Unnecessary else-statement.
Index: hash.c =================================================================== RCS file: /data/cvs/libvirt/src/hash.c,v retrieving revision 1.27 diff -u -r1.27 hash.c --- hash.c 21 Jan 2008 16:29:10 -0000 1.27 +++ hash.c 28 Jan 2008 06:48:09 -0000 @@ -543,6 +543,7 @@ if (prev) { prev->next = entry->next; free(entry); + entry = prev; } else { if (entry->next == NULL) { entry->valid = 0;
ACK, this is definitely needed.
@@ -553,6 +554,7 @@ sizeof(virHashEntry)); free(entry); entry = NULL; + i--; } } table->nbElems--;
I'm still not 100% clear on the logic around here, but I think your suggestion is correct.
@@ -560,8 +562,6 @@ prev = entry; if (entry) { entry = entry->next; - } else { - entry = NULL; } } }
ACK, clearly correct. Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|