Hagai,

That previous patch had a bug in it as well. :-(

The attached patch should fix your double free problem, as well as avoid the bug I introduced. :-)

It should be applied to the original sources. Please let me know if it works for you.

Thanks,
-sam

On Oct 22, 2007, at 4:44 PM, Sam Lang wrote:


Hagai,

This looks like a bug when using the system interfaces directly. Can you try the attached patch?

Thanks,

-sam

<objattr-double-free.patch>


On Oct 22, 2007, at 4:29 AM, Hagai Avrahami wrote:



Hi

Maybe someone can help me with the following problem

I have met double free problem described in valgrind log

1.
==18442== Invalid free() / delete / delete[]
==18442== at 0x401CFCF: free (vg_replace_malloc.c:235)
==18442== by 0x81E983A: PINT_copy_object_attr (pint-util.c:208)
==18442== by 0x81B26E5: getattr_object_getattr_comp_fn (sys- etattr.sm:535) ==18442== by 0x81E8B56: msgpairarray_completion_fn (msgpairarray.sm:554) ==18442== by 0x81B032B: PINT_state_machine_next (state-machine- fns.h:158)
==18442== by 0x81B1196: PINT_client_state_machine_testsome
(client-state-machine.c:744)
==18442== by 0x81B154C: PVFS_sys_testsome (client-state-machine.c: 934)

2.
==18442== Address 0x47421C0 is 0 bytes inside a block of size 32 free'd
==18442==    at 0x401CFCF: free (vg_replace_malloc.c:235)
==18442==    by 0x81E9A33: PINT_free_object_attr (pint-util.c:283)
==18442==    by 0x81B234B: getattr_acache_lookup (sys-getattr.sm:447)
==18442== by 0x81B032B: PINT_state_machine_next (state-machine- fns.h:158)
==18442==    by 0x81B0052: PINT_client_state_machine_post
(client-state-machine.c:369)
==18442==    by 0x81BA519: PVFS_isys_io (sys-io.sm:329)


///////////////////////////////////////////////
I got this double free case after using:
 PVFS_isys_getattr with mask =(PVFS_ATTR_SYS_ALL_NOHINT &
(~PVFS_ATTR_SYS_SIZE))

And after that, trying to read data using
PVFS_isys_io

///////////////////////////////////////////////

After some debugging I can see that after calling free(X) there are places
There is assignment of X to NULL and in some cases not

After Adding this lines to pvfs2-types.h

#define free(x) free(x); \
                x = NULL
The problem solved

Do you think it's OK to Add this lines?

Thanx for your help
Hagai


_______________________________________________
Pvfs2-developers mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers



_______________________________________________
Pvfs2-developers mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers

Reply via email to