need to call notmuch_threads_get (..) to actually move iterator

Subject: need to call notmuch_threads_get (..) to actually move iterator

Date: Wed, 24 Feb 2016 12:08:36 +0000

To: notmuch@notmuchmail.org

Cc:

From: Gaute Hope


Hi,

it seems to be necessary to actually call notmuch_threads_get (threads)
to move the thread iterator from a query object, just calling
notmuch_threads_move_to_next (..) is not enough:

```

notmuch_query_t *query;
notmuch_threads_t *threads;
notmuch_thread_t *thread;

query = notmuch_query_create (database, query_string);
threads = notmuch_query_search_threads (query);

int i = 0;

for (;
     notmuch_threads_valid (threads);
     notmuch_threads_move_to_next (threads))
{
    /*
     * with this line commented out the iterator seems to remain in
     * place, and if I below do another loop it will start from the
     * beginning.

    thread = notmuch_threads_get (threads);
    ....
    notmuch_thread_destroy (thread);
    */

    i++;
    if (i > 100) break;
}

for (;
     notmuch_threads_valid (threads);
     notmuch_threads_move_to_next (threads))
{
    /* the thread acquired here will be the first thread in the query.
     * it should be the 101th. */

    thread = notmuch_threads_get (threads);
    ....
    notmuch_thread_destroy (thread);

}


notmuch_query_destroy (query);
```

It is quite slow to skip the threads in this way, might it be faster if
move_to_next works correctly?

Regards, Gaute


Thread: