At 2010-11-18 12:28, Eric Blake Write:
* src/util/memory.h (VIR_REALLOC_N): Update docs.
(VIR_EXPAND_N, VIR_SHRINK_N): New macros.
(virAlloc, virAllocN, virReallocN, virAllocVar, virFree): Add some
gcc attributes.
* src/util/memory.c (virExpandN, virShrinkN): New functions.
(virReallocN): Update docs.
* docs/hacking.html.in: Prefer newer interfaces over
VIR_REALLOC_N, since uninitialized memory can bite us.
* HACKING: Regenerate.
* src/libvirt_private.syms: Export new helpers.
---
HACKING | 24 +++++++++++-------
docs/hacking.html.in | 25 +++++++++++-------
src/libvirt_private.syms | 2 +
src/util/memory.c | 59 +++++++++++++++++++++++++++++++++++++++++++++-
src/util/memory.h | 51 +++++++++++++++++++++++++++++++++++----
5 files changed, 134 insertions(+), 27 deletions(-)
There may be a bug in this patch.
When I use the newest libvirt, I find the following problem:
[root@localhost ~]# service libvirtd status
libvirtd (pid 4541) is running...
[root@localhost ~]# virsh start wency_vm1
error: cannot recv data: : Connection reset by peer
error: failed to connect to the hypervisor
[root@localhost ~]# service libvirtd status
libvirtd dead but pid file exists
[root@localhost ~]#
Test the libvirtd without --dameon, I find that:
[root@localhost newest]# libvirtd
Segmentation fault (core dumped)
[root@localhost newest]#
The folling is the output of the command 'gdb libvirtd core':
[root@localhost newest]# gdb /usr/sbin/libvirtd core.8996
<snip>
Core was generated by `libvirtd'.
Program terminated with signal 11, Segmentation fault.
#0 0x000000000041a181 in qemudDispatchServer (server=0x209dcd0, sock=<value optimized
out>) at libvirtd.c:1459
1459 server->clients[server->nclients++] = client;
<snip>
(gdb) bt
#0 0x000000000041a181 in qemudDispatchServer (server=0x209dcd0, sock=<value optimized
out>) at libvirtd.c:1459
#1 0x000000000041a6f1 in qemudDispatchServerEvent (watch=5, fd=8, events=1,
opaque=0x209dcd0) at libvirtd.c:2225
#2 0x0000000000415b71 in virEventDispatchHandles () at event.c:467
#3 virEventRunOnce () at event.c:592
#4 0x00000000004180e9 in qemudOneLoop () at libvirtd.c:2234
#5 0x00000000004183db in qemudRunLoop (opaque=0x209dcd0) at libvirtd.c:2343
#6 0x0000003ffec077e1 in start_thread () from /lib64/libpthread.so.0
#7 0x0000003ffe4e153d in clone () from /lib64/libc.so.6
(gdb) p server->clients
$2 = (struct qemud_client **) 0x0
I revert this patch and rebuild libvirt, the bug is not appreared.