After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 668905 - Low performance/Hang with large address book in e_reflow_model_changed()
Low performance/Hang with large address book in e_reflow_model_changed()
Status: RESOLVED DUPLICATE of bug 629510
Product: evolution
Classification: Applications
Component: Contacts
3.4.x (obsolete)
Other Linux
: Normal normal
: ---
Assigned To: evolution-addressbook-maintainers
Evolution QA team
Depends on:
Blocks:
 
 
Reported: 2012-01-28 12:42 UTC by Philip Withnall
Modified: 2013-09-13 01:05 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Philip Withnall 2012-01-28 12:42:55 UTC
If I have an address book with ~3000 contacts being shown in a single view, updates to the contact list (e.g. as caused by e-addressbook-factory notifying the UI of the removal of 1 contact) take so long as to freeze the UI and peg it at 100% CPU usage.

Here are a couple of stack traces taken after attaching to Evolution while it was in this state. I continued after the first one, letting Evolution run for a few more seconds before interrupting it again to get the second stack trace.

Although I haven't investigated it very fully, it looks like the reflow code for the address book is doing something inefficient.

This is with Evolution cc516b2f0ecd792c498f04ad1d075e360c6e7796 and EDS 144673a4a550e2542056076e0c0a5da21cad123a.

(gdb) bt
  • #0 g_slist_length
    at gslist.c line 811
  • #1 pango_layout_line_reorder
    at pango-layout.c line 4826
  • #2 pango_layout_line_postprocess
    at pango-layout.c line 5226
  • #3 process_line
    at pango-layout.c line 3649
  • #4 pango_layout_check_lines
    at pango-layout.c line 3912
  • #5 pango_layout_get_extents_internal
    at pango-layout.c line 2489
  • #6 pango_layout_get_extents
    at pango-layout.c line 2671
  • #7 pango_layout_get_pixel_extents
    at pango-layout.c line 2697
  • #8 pango_layout_get_pixel_size
    at pango-layout.c line 2746
  • #9 text_height
    at e-addressbook-reflow-adapter.c line 109
  • #10 addressbook_height
    at e-addressbook-reflow-adapter.c line 173
  • #11 e_reflow_model_height
  • #12 model_changed
    at e-reflow.c line 527
  • #13 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #14 g_closure_invoke
    at gclosure.c line 774
  • #15 signal_emit_unlocked_R
    at gsignal.c line 3302
  • #16 g_signal_emit_valist
    at gsignal.c line 3033
  • #17 g_signal_emit
    at gsignal.c line 3090
  • #18 e_reflow_model_changed
    at e-reflow-model.c line 288
  • #19 remove_contacts
    at e-addressbook-reflow-adapter.c line 367
  • #20 g_cclosure_marshal_VOID__POINTER
    at gmarshal.c line 609
  • #21 g_closure_invoke
    at gclosure.c line 774
  • #22 signal_emit_unlocked_R
    at gsignal.c line 3302
  • #23 g_signal_emit_valist
    at gsignal.c line 3033
  • #24 g_signal_emit
    at gsignal.c line 3090
  • #25 view_remove_contact_cb
    at e-addressbook-model.c line 254
  • #26 g_cclosure_marshal_VOID__POINTER
    at gmarshal.c line 609
  • #27 g_closure_invoke
    at gclosure.c line 774
  • #28 signal_emit_unlocked_R
    at gsignal.c line 3302
  • #29 g_signal_emit_valist
    at gsignal.c line 3033
  • #30 g_signal_emit
    at gsignal.c line 3090
  • #31 objects_removed_cb
    at e-book-client-view.c line 117
  • #32 g_cclosure_marshal_VOID__BOXED
    at gmarshal.c line 574
  • #33 g_closure_invoke
    at gclosure.c line 774
  • #34 signal_emit_unlocked_R
    at gsignal.c line 3302
  • #35 g_signal_emit_valist
    at gsignal.c line 3033
  • #36 g_signal_emit
    at gsignal.c line 3090
  • #37 e_gdbus_proxy_emit_signal
    at e-gdbus-templates.c line 644
  • #38 g_signal
    at e-gdbus-book-view.c line 550
  • #39 ffi_call_unix64
    from /usr/lib64/libffi.so.5
  • #40 ffi_call
    from /usr/lib64/libffi.so.5
  • #41 g_cclosure_marshal_generic
    at gclosure.c line 1189
  • #42 g_type_class_meta_marshal
    at gclosure.c line 885
  • #43 g_closure_invoke
    at gclosure.c line 774
  • #44 signal_emit_unlocked_R
    at gsignal.c line 3340
  • #45 g_signal_emit_valist
    at gsignal.c line 3033
  • #46 g_signal_emit
    at gsignal.c line 3090
  • #47 on_signal_received
  • #48 emit_signal_instance_in_idle_cb
    at gdbusconnection.c line 3681
  • #49 g_idle_dispatch
    at gmain.c line 4632
  • #50 g_main_dispatch
    at gmain.c line 2513
  • #51 g_main_context_dispatch
    at gmain.c line 3050
  • #52 g_main_context_iterate
    at gmain.c line 3121
  • #53 g_main_loop_run
    at gmain.c line 3315
  • #54 gtk_main
    at gtkmain.c line 1362
  • #55 main
    at main.c line 688
  • #0 pthread_mutex_unlock
    from /lib64/libpthread.so.0
  • #1 cairo_ft_scaled_font_lock_face
    at cairo-ft-font.c line 3158
  • #2 pango_cairo_fc_font_lock_face
    at pangocairo-fcfont.c line 122
  • #3 pango_fc_font_lock_face
    at pangofc-font.c line 673
  • #4 pango_ot_buffer_output
    at pango-ot-buffer.c line 345
  • #5 basic_engine_shape
    at basic-fc.c line 214
  • #6 _pango_engine_shape_shape
    at pango-engine.c line 94
  • #7 pango_shape
    at shape.c line 55
  • #8 shape_run
    at pango-layout.c line 3182
  • #9 process_item
    at pango-layout.c line 3293
  • #10 process_line
  • #11 pango_layout_check_lines
    at pango-layout.c line 3912
  • #12 pango_layout_get_extents_internal
    at pango-layout.c line 2489
  • #13 pango_layout_get_extents
    at pango-layout.c line 2671
  • #14 pango_layout_get_pixel_extents
    at pango-layout.c line 2697
  • #15 pango_layout_get_pixel_size
    at pango-layout.c line 2746
  • #16 text_height
    at e-addressbook-reflow-adapter.c line 109
  • #17 addressbook_height
    at e-addressbook-reflow-adapter.c line 171
  • #18 e_reflow_model_height
    at e-reflow-model.c line 95
  • #19 model_changed
    at e-reflow.c line 527
  • #20 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #21 g_closure_invoke
    at gclosure.c line 774
  • #22 signal_emit_unlocked_R
    at gsignal.c line 3302
  • #23 g_signal_emit_valist
    at gsignal.c line 3033
  • #24 g_signal_emit
    at gsignal.c line 3090
  • #25 e_reflow_model_changed
    at e-reflow-model.c line 288
  • #26 remove_contacts
    at e-addressbook-reflow-adapter.c line 367
  • #27 g_cclosure_marshal_VOID__POINTER
    at gmarshal.c line 609
  • #28 g_closure_invoke
    at gclosure.c line 774
  • #29 signal_emit_unlocked_R
    at gsignal.c line 3302
  • #30 g_signal_emit_valist
    at gsignal.c line 3033
  • #31 g_signal_emit
    at gsignal.c line 3090
  • #32 view_remove_contact_cb
    at e-addressbook-model.c line 254
  • #33 g_cclosure_marshal_VOID__POINTER
    at gmarshal.c line 609
  • #34 g_closure_invoke
    at gclosure.c line 774
  • #35 signal_emit_unlocked_R
    at gsignal.c line 3302
  • #36 g_signal_emit_valist
    at gsignal.c line 3033
  • #37 g_signal_emit
    at gsignal.c line 3090
  • #38 objects_removed_cb
    at e-book-client-view.c line 117
  • #39 g_cclosure_marshal_VOID__BOXED
  • #40 g_closure_invoke
    at gclosure.c line 774
  • #41 signal_emit_unlocked_R
    at gsignal.c line 3302
  • #42 g_signal_emit_valist
    at gsignal.c line 3033
  • #43 g_signal_emit
    at gsignal.c line 3090
  • #44 e_gdbus_proxy_emit_signal
    at e-gdbus-templates.c line 644
  • #45 g_signal
    at e-gdbus-book-view.c line 550
  • #46 ffi_call_unix64
    from /usr/lib64/libffi.so.5
  • #47 ffi_call
    from /usr/lib64/libffi.so.5
  • #48 g_cclosure_marshal_generic
    at gclosure.c line 1189
  • #49 g_type_class_meta_marshal
    at gclosure.c line 885
  • #50 g_closure_invoke
    at gclosure.c line 774
  • #51 signal_emit_unlocked_R
    at gsignal.c line 3340
  • #52 g_signal_emit_valist
    at gsignal.c line 3033
  • #53 g_signal_emit
    at gsignal.c line 3090
  • #54 on_signal_received
    at gdbusproxy.c line 922
  • #55 emit_signal_instance_in_idle_cb
    at gdbusconnection.c line 3681
  • #56 g_idle_dispatch
  • #57 g_main_dispatch
    at gmain.c line 2513
  • #58 g_main_context_dispatch
    at gmain.c line 3050
  • #59 g_main_context_iterate
    at gmain.c line 3121
  • #60 g_main_loop_run
    at gmain.c line 3315
  • #61 gtk_main
    at gtkmain.c line 1362
  • #62 main
    at main.c line 688
  • #19 model_changed
    at e-reflow.c line 527
  • #32 view_remove_contact_cb
    at e-addressbook-model.c line 254
$2 = {data = 0x0, len = 0}
(gdb) print g_slist_length(ids)
$3 = 1
Comment 1 Milan Crha 2012-04-26 09:35:21 UTC
This is basically the same issue as the below bug, thus I'm marking this as a duplicate of it.

*** This bug has been marked as a duplicate of bug 629510 ***