mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 12:28:09 +01:00
Split notmuch_database_close into two functions
Formerly notmuch_database_close closed the xapian database and destroyed the talloc structure associated with the notmuch database object. Split notmuch_database_close into notmuch_database_close and notmuch_database_destroy. This makes it possible for long running programs to close the xapian database and thus release the lock associated with it without destroying the data structures obtained from it. This also makes the api more consistent since every other data structure has a destructor function. The comments in notmuch.h are a courtesy of Austin Clements. Signed-off-by: Justus Winter <4winter@informatik.uni-hamburg.de>
This commit is contained in:
parent
9429141bb1
commit
7864350c93
2 changed files with 30 additions and 6 deletions
|
@ -642,7 +642,7 @@ notmuch_database_open (const char *path,
|
||||||
" read-write mode.\n",
|
" read-write mode.\n",
|
||||||
notmuch_path, version, NOTMUCH_DATABASE_VERSION);
|
notmuch_path, version, NOTMUCH_DATABASE_VERSION);
|
||||||
notmuch->mode = NOTMUCH_DATABASE_MODE_READ_ONLY;
|
notmuch->mode = NOTMUCH_DATABASE_MODE_READ_ONLY;
|
||||||
notmuch_database_close (notmuch);
|
notmuch_database_destroy (notmuch);
|
||||||
notmuch = NULL;
|
notmuch = NULL;
|
||||||
goto DONE;
|
goto DONE;
|
||||||
}
|
}
|
||||||
|
@ -702,7 +702,7 @@ notmuch_database_open (const char *path,
|
||||||
} catch (const Xapian::Error &error) {
|
} catch (const Xapian::Error &error) {
|
||||||
fprintf (stderr, "A Xapian exception occurred opening database: %s\n",
|
fprintf (stderr, "A Xapian exception occurred opening database: %s\n",
|
||||||
error.get_msg().c_str());
|
error.get_msg().c_str());
|
||||||
notmuch_database_close (notmuch);
|
notmuch_database_destroy (notmuch);
|
||||||
notmuch = NULL;
|
notmuch = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -738,9 +738,19 @@ notmuch_database_close (notmuch_database_t *notmuch)
|
||||||
}
|
}
|
||||||
|
|
||||||
delete notmuch->term_gen;
|
delete notmuch->term_gen;
|
||||||
|
notmuch->term_gen = NULL;
|
||||||
delete notmuch->query_parser;
|
delete notmuch->query_parser;
|
||||||
|
notmuch->query_parser = NULL;
|
||||||
delete notmuch->xapian_db;
|
delete notmuch->xapian_db;
|
||||||
|
notmuch->xapian_db = NULL;
|
||||||
delete notmuch->value_range_processor;
|
delete notmuch->value_range_processor;
|
||||||
|
notmuch->value_range_processor = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
notmuch_database_destroy (notmuch_database_t *notmuch)
|
||||||
|
{
|
||||||
|
notmuch_database_close (notmuch);
|
||||||
talloc_free (notmuch);
|
talloc_free (notmuch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -133,7 +133,7 @@ typedef struct _notmuch_filenames notmuch_filenames_t;
|
||||||
*
|
*
|
||||||
* After a successful call to notmuch_database_create, the returned
|
* After a successful call to notmuch_database_create, the returned
|
||||||
* database will be open so the caller should call
|
* database will be open so the caller should call
|
||||||
* notmuch_database_close when finished with it.
|
* notmuch_database_destroy when finished with it.
|
||||||
*
|
*
|
||||||
* The database will not yet have any data in it
|
* The database will not yet have any data in it
|
||||||
* (notmuch_database_create itself is a very cheap function). Messages
|
* (notmuch_database_create itself is a very cheap function). Messages
|
||||||
|
@ -165,7 +165,7 @@ typedef enum {
|
||||||
* An existing notmuch database can be identified by the presence of a
|
* An existing notmuch database can be identified by the presence of a
|
||||||
* directory named ".notmuch" below 'path'.
|
* directory named ".notmuch" below 'path'.
|
||||||
*
|
*
|
||||||
* The caller should call notmuch_database_close when finished with
|
* The caller should call notmuch_database_destroy when finished with
|
||||||
* this database.
|
* this database.
|
||||||
*
|
*
|
||||||
* In case of any failure, this function returns NULL, (after printing
|
* In case of any failure, this function returns NULL, (after printing
|
||||||
|
@ -175,11 +175,25 @@ notmuch_database_t *
|
||||||
notmuch_database_open (const char *path,
|
notmuch_database_open (const char *path,
|
||||||
notmuch_database_mode_t mode);
|
notmuch_database_mode_t mode);
|
||||||
|
|
||||||
/* Close the given notmuch database, freeing all associated
|
/* Close the given notmuch database.
|
||||||
* resources. See notmuch_database_open. */
|
*
|
||||||
|
* After notmuch_database_close has been called, calls to other
|
||||||
|
* functions on objects derived from this database may either behave
|
||||||
|
* as if the database had not been closed (e.g., if the required data
|
||||||
|
* has been cached) or may fail with a
|
||||||
|
* NOTMUCH_STATUS_XAPIAN_EXCEPTION.
|
||||||
|
*
|
||||||
|
* notmuch_database_close can be called multiple times. Later calls
|
||||||
|
* have no effect.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
notmuch_database_close (notmuch_database_t *database);
|
notmuch_database_close (notmuch_database_t *database);
|
||||||
|
|
||||||
|
/* Destroy the notmuch database, closing it if necessary and freeing
|
||||||
|
* all associated resources. */
|
||||||
|
void
|
||||||
|
notmuch_database_destroy (notmuch_database_t *database);
|
||||||
|
|
||||||
/* Return the database path of the given database.
|
/* Return the database path of the given database.
|
||||||
*
|
*
|
||||||
* The return value is a string owned by notmuch so should not be
|
* The return value is a string owned by notmuch so should not be
|
||||||
|
|
Loading…
Reference in a new issue