Here's some minimal code to illustrate the problem:

import notmuch2

db = notmuch2.Database()

# this works
msgs = db.messages("date:today")
for msg in msgs:
    print(msg.messageid)

# this doesn't segfault, but prints truncated IDs
msgs = [m for m in db.messages("date:today") if m.messageid]
print(len(msgs))
for msg in msgs:
    print(msg.messageid)

# this segfaults
msgs = list(db.messages("date:today"))
print(len(msgs))
for msg in msgs:
    print(msg.messageid)


Cheers,

Lars


On Sun, 02 Feb 2025 13:03:53 -0700, Lars Kotthoff <li...@larsko.org> wrote:
> > Sounds good. Let us know if there problems.
> 
> Actually yes — I'm getting a list of messages with db.messages(...). This 
> returns the expected iterator, and I can iterate over the messages, getting 
> IDs 
> etc. However, when I use list() with the result, I'm getting segmentation 
> faults 
> when accessing IDs etc. It looks like list() gets only references to the 
> objects, but not the actual contents (and the memory associated with them is 
> freed when the iterator is exhausted).
> 
> The same approach works fine with db.threads(...) (which doesn't seem to be 
> in 
> the online documentation though).
> 
> Am I missing something? Do I need to manually copy the Message objects 
> somehow?
> 
> Thanks,
> 
> Lars
> 
_______________________________________________
notmuch mailing list -- notmuch@notmuchmail.org
To unsubscribe send an email to notmuch-le...@notmuchmail.org

Reply via email to