EXPORTED void search_query_free(search_query_t *query) { int i; if (!query) return; free_hash_table(&query->subs_by_folder, subquery_free); free_hash_table(&query->subs_by_indexed, subquery_free); search_expr_free(query->global_sub.expr); ptrarray_fini(&query->folders_by_id); free_hash_table(&query->folders_by_name, folder_free); ptrarray_fini(&query->merged_msgdata); /* free pending MsgData arrays */ for (i = 0 ; i < query->saved_msgdata.count ; i++) { struct search_saved_msgdata *saved = ptrarray_nth(&query->saved_msgdata, i); index_msgdata_free(saved->msgdata, saved->n); free(saved); } ptrarray_fini(&query->saved_msgdata); free(query); }
void xapian_dbw_close(xapian_dbw_t *dbw) { if (!dbw) return; try { delete dbw->database; delete dbw->term_generator; delete dbw->stemmer; delete dbw->stopper; delete dbw->document; for (int i = 0; i < dbw->otherdbs.count; i++) { Xapian::Database *database = (Xapian::Database *)ptrarray_nth(&dbw->otherdbs, i); delete database; } ptrarray_fini(&dbw->otherdbs); if (dbw->cyrusid) free(dbw->cyrusid); free(dbw); } catch (const Xapian::Error &err) { syslog(LOG_ERR, "IOERROR: Xapian: caught exception: %s: %s", err.get_context().c_str(), err.get_description().c_str()); } }