This serves me right for committing untested code. The
notmuch_query_search_threads was totally broken, (it didn't properly
treat -1 as being unlimited and instead returned no threads in that
case).
     seen = g_hash_table_new_full (g_str_hash, g_str_equal,
                                  free, NULL);
 
-    while (threads_seen < first + max_threads)
+    while (max_threads < 0 || threads_seen < first + max_threads)
     {
        int messages_seen_previously = messages_seen;