bdrv_delete(s->hd) frees the memory pointed to by s->hd.
vmdk_parent_close accesses the freed memory?
----
static void vmdk_close(BlockDriverState *bs)
{
BDRVVmdkState *s = bs->opaque;
qemu_free(s->l1_table);
qemu_free(s->l2_cache);
bdrv_delete(s->hd);
// try to close parent image, if exist
vmdk_parent_close(s->hd);
}