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 724863 - [imapx] Cannot copy folder into IMAP account
[imapx] Cannot copy folder into IMAP account
Status: RESOLVED FIXED
Product: evolution-data-server
Classification: Platform
Component: Mailer
3.10.x (obsolete)
Other Linux
: Normal major
: ---
Assigned To: evolution-mail-maintainers
Evolution QA team
Depends on:
Blocks:
 
 
Reported: 2014-02-21 10:06 UTC by Milan Crha
Modified: 2014-03-03 17:17 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
eds patch for 3.8.x (1.95 KB, patch)
2014-02-21 10:58 UTC, Milan Crha
reviewed Details | Review

Description Milan Crha 2014-02-21 10:06:41 UTC
Currently (git master, 3.10, 3.8) an attempt to copy a folder into an IMAPx account leads to an error that the destination folder cannot be opened, which makes sense, because it doesn't exists yet.

After details search in the code it turned out that camel_store_get_folder_sync() is called with a CAMEL_STORE_FOLDER_CREATE flag set, but the IMAPx code simply ignores it and fails.

I even tried to create folder first, but the circular dependency between imapx_store_get_folder_sync() and imapx_store_create_folder_sync() (I added the later call to the previous), makes it impossible, effectively causing hang of the operations (see backtrace below).

I cannot fix this, due to the added complexity, thus it'll be better to have Matthew look on this.

Thread 2 (Thread 0x7fef797da700 (LWP 17876))

  • #0 pthread_cond_wait
    from /lib64/libpthread.so.0
  • #1 g_cond_wait
    from /lib64/libglib-2.0.so.0
  • #2 camel_object_bag_get
    at camel-object-bag.c line 251
  • #3 imapx_store_add_mailbox_to_folder
    at camel-imapx-store.c line 351
  • #4 imapx_store_mailbox_created_cb
    at camel-imapx-store.c line 612
  • #5 g_closure_invoke
    from /lib64/libgobject-2.0.so.0
  • #6 signal_emit_unlocked_R
    from /lib64/libgobject-2.0.so.0
  • #7 g_signal_emit_valist
    from /lib64/libgobject-2.0.so.0
  • #8 g_signal_emit
    from /lib64/libgobject-2.0.so.0
  • #9 imapx_untagged_list
    at camel-imapx-server.c line 2618
  • #10 imapx_untagged
    at camel-imapx-server.c line 3085
  • #11 imapx_step
    at camel-imapx-server.c line 3432
  • #12 imapx_parse_contents
    at camel-imapx-server.c line 7441
  • #13 imapx_ready_to_read
    at camel-imapx-server.c line 7485
  • #14 gnutls_source_dispatch
    from /usr/lib64/gio/modules/libgiognutls.so
  • #15 g_main_context_dispatch
    from /lib64/libglib-2.0.so.0
  • #16 g_main_context_iterate.isra.24
    from /lib64/libglib-2.0.so.0
  • #17 g_main_loop_run
    from /lib64/libglib-2.0.so.0
  • #18 imapx_parser_thread
    at camel-imapx-server.c line 7586
  • #19 g_thread_proxy
    from /lib64/libglib-2.0.so.0
  • #20 start_thread
    from /lib64/libpthread.so.0
  • #21 clone
    from /lib64/libc.so.6

Comment 1 Milan Crha 2014-02-21 10:58:48 UTC
Created attachment 269888 [details] [review]
eds patch for 3.8.x

for evolution-data-server 3.8.5;

This is sufficient to make it work in 3.8.5. To not have it completely lost, and because some of its bits can be reused, I upload it here.
Comment 2 Matthew Barnes 2014-02-21 13:34:17 UTC
I'd like to get rid of CAMEL_STORE_FOLDER_CREATE and keep folder creation a separate operation.  I've always thought mixing up operations like that was bad API design.