http://bugzilla.moblin.org/show_bug.cgi?id=7857


pohly <[email protected]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|Undecided                   |P2
             Status|NEW                         |ASSIGNED




--- Comment #4 from pohly <[email protected]>  2009-11-10 01:40:32 PST ---
(In reply to comment #3)
> > This points towards libical-internal memory handling. Running the binary 
> > under
> > valgrind would provide more information. If you have such packages, can you
> > also install -debug or -dbg packages for libecal and/or 
> > evolution-data-server
> > before running valgrind?
> 
> I've attached the output from valgrind using the normal packages, CentOS does
> not seem to provide packages with debug info. I'll try to build them from
> scratch.

Not necessary, the valgrind output points towards a problem: libical inside
your version of libecal seems to use the older memory handling (strings owned
by libical) whereas SyncEvolution/libsynthesis seem to believe the new handling
is in use (strings owned and freed by caller).

Thus the invalid free. First in
libsynthesis/src/platform_adapters/linux/platform_timezones.cpp:
==10651==  Address 0x5951F28 is 0 bytes inside a block of size 200 free'd
==10651==    at 0x4A0541E: free (vg_replace_malloc.c:233)
==10651==    by 0x4D35C7A: sysync::loadSystemZoneDefinitions(sysync::GZones*)
(platform_timezones.cpp:188)

Then in libical:
==10651==    at 0x4A0541E: free (vg_replace_malloc.c:233)
==10651==    by 0x3702E69169: icalmemory_add_tmp_buffer (in
/usr/lib64/libecal-1.2.so.7.0.2)
==10651==    by 0x3702E69215: icalmemory_tmp_buffer (in
/usr/lib64/libecal-1.2.so.7.0.2)

platform_timezones.cpp should support both memory handling models. Detecting it
is a bit convoluted because upstream libical changed back to the older model
later on and introduced new _p calls instead.

You did not configure with --enable-evolution-compatibility, did you? In that
case the check is done at compile time, depending on LIBICAL_MEMFIXES being
defined by libical.h.

Ah, that's it:

#  ifdef LIBICAL_MEMFIXES
   // new-style Evolution libical: memory must be freed by caller
#   define ICAL_FREE(_x) free(_x)
#  else
#   define ICAL_FREE(_x) free(_x)
#  endif

The second define should be
#  else
#   define ICAL_FREE(_x)
#  endif

Can you recompile with that fix and try again?

-- 
Configure bugmail: http://bugzilla.moblin.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching someone on the CC list of the bug.
_______________________________________________
Syncevolution-issues mailing list
[email protected]
http://lists.syncevolution.org/listinfo/syncevolution-issues

Reply via email to