GNOME Bugzilla – Bug 694112
[abrt] Crash under e_book_backend_ldap_stop_book_view()
Last modified: 2014-08-28 17:02:15 UTC
Moving this from a downstream bug report: https://bugzilla.redhat.com/show_bug.cgi?id=912332 Version-Release number of selected component: evolution-data-server-3.6.3-1.fc18 Additional info: backtrace_rating: 3 cmdline: /usr/libexec/evolution-addressbook-factory executable: /usr/libexec/evolution-addressbook-factory kernel: 3.7.8 Core was generated by `/usr/libexec/evolution-addressbook-factory'. Program terminated with signal 11, Segmentation fault.
+ Trace 231531
Thread 1 (Thread 0x7f4f84ca7800 (LWP 2117))
Similar another downstream bug report: https://bugzilla.redhat.com/show_bug.cgi?id=917173 It seems it's not related to LDAP only:
+ Trace 231588
Thread 1 (Thread 0x7f8709ecd800 (LWP 1918))
Another upstream bug report from 3.8.3: https://bugzilla.redhat.com/show_bug.cgi?id=984888 The reporter also mentions LDAP. Core was generated by `/usr/libexec/evolution-addressbook-factory'. Program terminated with signal 6, Aborted.
+ Trace 232254
Thread 1 (Thread 0x7f732e1ac840 (LWP 2172))
I finally managed to reproduce this. The problem was that the evolution code tried to be nice to the backend, which means that it initiated a search, but then, when the new search criteria was changed by the user (typing more letters in the To/Ccc/Bcc fields) evolution stopped the search and freed the associated object. The evolution-data-server side run a dedicated thread for the stop operation, while the free operation was done in another thread. The free operation also runs a stop for the associated search, just in case. It could happen, with a good timing, that the stop was called twice on one object's data (internal to LDAP backend), causing access of an already freed memory. Making sure that multiple threads cannot access LDAP's private data of the search fixes the thread interleaving problem here. I believe this is LDAP specific, the comment #1 says something else, but I believe this is due to accessing already freed memory and overwriting data in a random place, causing crash slightly later. Created commit f49de9c in eds master (3.13.6+) [1] Created commit a167bc7 in eds evolution-data-server-3-12 (3.12.6+) [1] https://git.gnome.org/browse/evolution-data-server/commit/?id=f49de9c