[PATCH 7/7] python: wrap and use notmuch_database_destroy as destructor
Austin Clements
amdragon at MIT.EDU
Thu Apr 12 10:02:49 PDT 2012
Quoth Justus Winter on Mar 21 at 1:55 am:
> Adapt the go bindings to the notmuch_database_close split.
Typo.
>
> Signed-off-by: Justus Winter <4winter at informatik.uni-hamburg.de>
> ---
> bindings/python/notmuch/database.py | 17 +++++++++++++++--
> 1 files changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/bindings/python/notmuch/database.py b/bindings/python/notmuch/database.py
> index 44d40fd..9a1896b 100644
> --- a/bindings/python/notmuch/database.py
> +++ b/bindings/python/notmuch/database.py
> @@ -218,9 +218,22 @@ class Database(object):
> _close.restype = None
>
> def close(self):
> - """Close and free the notmuch database if needed"""
> - if self._db is not None:
> + '''
> + Closes the notmuch database.
> + '''
> + if self._db:
> self._close(self._db)
> +
> + _destroy = nmlib.notmuch_database_destroy
> + _destroy.argtypes = [NotmuchDatabaseP]
> + _destroy.restype = None
> +
> + def destroy(self):
Should this be __del__? The existing __del__ is certainly wrong with
this change, since it only closes the database and doesn't free it. I
think this function is exactly what you want __del__ to be now.
(I think it also doesn't make sense to expose notmuch_database_destroy
as a general, public method since it will free all of the other C
objects out from under the bindings, resulting in exactly the double
free-type crashes that you're trying to avoid. It appears that none
of the other Python classes have a destroy method.)
> + '''
> + Destroys the notmuch database.
> + '''
> + if self._db:
> + self._destroy(self._db)
> self._db = None
>
> def __enter__(self):
More information about the notmuch
mailing list