unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: "W. Trevor King" <wking@tremily.us>
To: Konrad Hinsen <konrad.hinsen@fastmail.net>
Cc: notmuch@notmuchmail.org
Subject: Re: Crash with Python bindings
Date: Tue, 12 Jan 2016 10:51:07 -0800	[thread overview]
Message-ID: <20160112185107.GA21580@odin.tremily.us> (raw)
In-Reply-To: <m1y4budggd.fsf@fastmail.net>

[-- Attachment #1: Type: text/plain, Size: 1676 bytes --]

On Tue, Jan 12, 2016 at 03:23:46PM +0100, Konrad Hinsen wrote:
> Hi Justus,
> 
> > So I guess what happens is that Python3 changed how the
> > interpreter environment is torn down and they actually destroy the
> > 'q' object.  If that is so, then your data is indeed safe.
> 
> That reminds me of a recent change in object finalization in Python
> 3:
> 
>   https://www.python.org/dev/peps/pep-0442/

I'm pretty sure that is what's going on.  The PEP landed in Python
3.4, explaining why I don't see this issue in 3.3 [1].  And it has
[2]:

   In particular, this PEP obsoletes the current guideline that
   "objects with a __del__ method should not be part of a reference
   cycle".

I'm not sure what the best way is to fix __del__ in our Python
bindings, but if you manage them explicitly:

  db = Database()
  q = Query(db, "*")
  del q
  db.close()
  del db

you can avoid the abort (which happens when q.__del__ is called after
db.__del__).  We could make that sort of cleanup easier with context
managers for Query objects (we have them for databases since [3]), and
they look like the only object that keep an internal database
reference:

  with Database() as db:
    with Query(db, "*") as q:
      # do something with q
    db.close()

Cheers,
Trevor

[1]: id:20160112180813.GA20499@odin.tremily.us
[2]: https://www.python.org/dev/peps/pep-0442/#impact
[3]: 36ce7e3c (python: implement the context manager protocol for
     database objects, 2012-02-15, v0.12)

-- 
This email may be signed or encrypted with GnuPG (http://www.gnupg.org).
For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

  reply	other threads:[~2016-01-12 18:53 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-12  9:41 Crash with Python bindings Konrad Hinsen
2016-01-12 13:11 ` David Bremner
2016-01-12 14:21   ` Konrad Hinsen
2016-01-12 15:26     ` David Bremner
2016-01-12 19:03       ` David Bremner
2016-01-12 19:13         ` Binding access to ~/.notmuch-config (was: Crash with Python bindings) W. Trevor King
2016-01-13 11:25           ` Binding access to ~/.notmuch-config Konrad Hinsen
2016-01-13 12:25             ` David Bremner
2016-01-13 17:23               ` W. Trevor King
     [not found] ` <20160112102329.4269.20741@thinkbox.jade-hamburg.de>
2016-01-12 14:23   ` Crash with Python bindings Konrad Hinsen
2016-01-12 18:51     ` W. Trevor King [this message]
2018-03-16 11:59       ` David Bremner
2018-03-16 12:12         ` Justus Winter
2018-03-16 18:30         ` Floris Bruynooghe
2018-03-16 22:40           ` Daniel Kahn Gillmor
2018-03-18  8:01             ` Floris Bruynooghe
2018-03-21 10:16           ` New Python bindings (was: Crash with Python bindings) Justus Winter
2018-03-25 17:40             ` pytest integration for the notmuch test suite David Bremner
2018-03-25 17:40               ` [PATCH 1/3] configure: check for pytest binary David Bremner
2018-03-26 20:55                 ` Floris Bruynooghe
2018-03-25 17:40               ` [PATCH 2/3] test: add new test_expect_pytest_success David Bremner
2018-03-25 17:40               ` [PATCH 3/3] test: add example test using pytest David Bremner
2018-03-25 19:14               ` pytest integration for the notmuch test suite Tomi Ollila
2018-03-26 11:31                 ` David Bremner
2018-03-26 21:01               ` Floris Bruynooghe
2018-03-26 21:25                 ` David Bremner
2018-03-26 20:47             ` New Python bindings (was: Crash with Python bindings) Floris Bruynooghe
2018-03-27 22:29               ` New Python bindings Justus Winter
2018-03-28 22:07                 ` Floris Bruynooghe
2018-03-28  7:20             ` New Python bindings (was: Crash with Python bindings) Brian May
2018-03-28 13:42               ` David Bremner
2018-03-28 22:15                 ` Floris Bruynooghe
2018-03-28 22:37                 ` Brian May
2018-03-28 23:13                   ` David Bremner
2018-04-04 22:37                     ` Brian May
2018-04-05  1:09                       ` Pypi David Bremner
2018-03-28 22:10               ` New Python bindings (was: Crash with Python bindings) Floris Bruynooghe
2016-01-12 18:08 ` Crash with Python bindings W. Trevor King

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160112185107.GA21580@odin.tremily.us \
    --to=wking@tremily.us \
    --cc=konrad.hinsen@fastmail.net \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).