diff --git a/NEWS b/NEWS index 9aacc808..221989c9 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,8 @@ +3 May 2009: Overview of changes in 2.27.2 +========================================= +* linux: + - glibtop_get_proc_map: oops, fixed segfault. + 3 May 2009: Overview of changes in 2.27.1 ========================================= * linux: diff --git a/configure.in b/configure.in index 73f73167..9cd8d53f 100644 --- a/configure.in +++ b/configure.in @@ -4,7 +4,7 @@ dnl m4_define([libgtop_major_version], [2]) m4_define([libgtop_minor_version], [27]) -m4_define([libgtop_micro_version], [1]) +m4_define([libgtop_micro_version], [2]) m4_define([libgtop_version], [libgtop_major_version.libgtop_minor_version.libgtop_micro_version]) dnl increment if the interface has additions, changes, removals. diff --git a/sysdeps/linux/procmap.c b/sysdeps/linux/procmap.c index 31dd9b13..d7f0e729 100644 --- a/sysdeps/linux/procmap.c +++ b/sysdeps/linux/procmap.c @@ -192,10 +192,10 @@ glibtop_get_proc_map_s (glibtop *server, glibtop_proc_map *buf, pid_t pid) It's the average number of entry per process on my laptop */ - size_t added = 0; + size_t added = 0, entry_list_capacity = 100; GArray *entry_list = g_array_sized_new(FALSE, FALSE, sizeof(glibtop_map_entry), - 100); + entry_list_capacity); FILE *maps; const char *filename; gboolean has_smaps; @@ -271,8 +271,11 @@ glibtop_get_proc_map_s (glibtop *server, glibtop_proc_map *buf, pid_t pid) element. */ - if (G_UNLIKELY(added >= entry_list->len)) { - g_array_set_size(entry_list, 2 * entry_list->len); + g_debug("added = %d len = %d\n", (int)added, (int)entry_list_capacity); + + if (G_UNLIKELY(added >= entry_list_capacity)) { + entry_list_capacity *= 2; + g_array_set_size(entry_list, entry_list_capacity); } entry = &g_array_index(entry_list, glibtop_map_entry, added++); @@ -308,7 +311,7 @@ eof: buf->flags = _glibtop_sysdeps_proc_map; - buf->number = entry_list->len; + buf->number = added; buf->size = sizeof (glibtop_map_entry); buf->total = buf->number * buf->size;