[Libvir] [PATCH] Fix the function that remove the element of the hash table.

Daniel P. Berrange berrange at redhat.com
Tue Jan 29 14:45:44 UTC 2008


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  -=| 




More information about the libvir-list mailing list