On 12/16/14 13:32, Luyao Huang wrote:
On 12/16/2014 08:00 PM, Peter Krempa wrote:
> On 12/15/14 10:10, Luyao Huang wrote:
>> We free them before, then use it. This make we always do
> We clear the pointer, not free.
>
>> virDomainDefAddImplicitControllers when attach a disk.
>>
>> Signed-off-by: Luyao Huang <lhuang(a)redhat.com>
>> ---
>> src/qemu/qemu_driver.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>> index df3ba6d..a9afa5d 100644
>> --- a/src/qemu/qemu_driver.c
>> +++ b/src/qemu/qemu_driver.c
>> @@ -7223,10 +7223,10 @@ qemuDomainAttachDeviceConfig(virQEMUCapsPtr
>> qemuCaps,
>> if (virDomainDiskInsert(vmdef, disk))
>> return -1;
>> /* vmdef has the pointer. Generic codes for vmdef will do
>> all jobs */
>> - dev->data.disk = NULL;
> The comment even explains why the line is there. From that point on, the
> pointer is owned by 'vmdef' and thus the original needs to be cleared so
> that it isn't freed (and doulbe freed) later on.
Oh, i see. Thanks for your review and i found seems i don't check if gdb
is real go to virDomainDefAddImplicitControllers, just check the
pointer's value is optimized out.
(gdb)
7204 dev->data.disk = NULL;
(gdb)
7205 if (disk->bus != VIR_DOMAIN_DISK_BUS_VIRTIO)
(gdb) p disk
$3 = <optimized out>
"optimized out" means that GDB can't access the variable as it is stored
in a register or for other reason caused by the code optimizer.
It does not mean that the variable is cleared or whatever, just that GDB
can't print it.
Peter