diff --git a/src/mu-query.cc b/src/mu-query.cc index ecd2283f..7166960e 100644 --- a/src/mu-query.cc +++ b/src/mu-query.cc @@ -191,12 +191,22 @@ struct _MuQuery { Xapian::ValueRangeProcessor* _size_range_processor; }; -gboolean +static void +uninit_mu_query (MuQuery *mqx) +{ + try { + delete mqx->_db; + delete mqx->_qparser; + + delete mqx->_date_range_processor; + delete mqx->_size_range_processor; + + } MU_XAPIAN_CATCH_BLOCK; +} + +static gboolean init_mu_query (MuQuery *mqx, const char* dbpath) { - mqx->_db = 0; - mqx->_qparser = 0; - try { mqx->_db = new Xapian::Database(dbpath); mqx->_qparser = new Xapian::QueryParser; @@ -222,30 +232,12 @@ init_mu_query (MuQuery *mqx, const char* dbpath) } MU_XAPIAN_CATCH_BLOCK; - try { - delete mqx->_db; - delete mqx->_qparser; - - } MU_XAPIAN_CATCH_BLOCK; + // things went wrong, cleanup resources + uninit_mu_query (mqx); return FALSE; } - -static void -uninit_mu_query (MuQuery *mqx) -{ - try { - delete mqx->_db; - delete mqx->_qparser; - - delete mqx->_date_range_processor; - delete mqx->_size_range_processor; - - } MU_XAPIAN_CATCH_BLOCK; -} - - static bool set_query (MuQuery *mqx, Xapian::Query& q, const char* searchexpr, GError **err) { @@ -323,7 +315,7 @@ mu_query_new (const char* xpath, GError **err) if (mu_util_xapian_is_empty (xpath)) g_warning ("database %s is empty; nothing to do", xpath); - mqx = g_new (MuQuery, 1); + mqx = g_new0 (MuQuery, 1); if (!init_mu_query (mqx, xpath)) { g_set_error (err, 0, MU_ERROR_INTERNAL, diff --git a/src/tests/test-mu-query.c b/src/tests/test-mu-query.c index bd724807..077c975e 100644 --- a/src/tests/test-mu-query.c +++ b/src/tests/test-mu-query.c @@ -210,6 +210,7 @@ test_mu_query_05 (void) MuMsgIter *iter; MuMsg *msg; gchar *xpath; + GError *err; xpath = fill_database (); g_assert (xpath != NULL); @@ -217,8 +218,14 @@ test_mu_query_05 (void) query = mu_query_new (xpath, NULL); iter = mu_query_run (query, "fünkÿ", MU_MSG_FIELD_ID_NONE, FALSE, 1, NULL); - msg = mu_msg_iter_get_msg (iter, NULL); - + err = NULL; + msg = mu_msg_iter_get_msg (iter, &err); + if (!msg) { + g_warning ("error getting message: %s", err->message); + g_error_free (err); + g_assert_not_reached (); + } + g_assert_cmpstr (mu_msg_get_subject(msg),==, "Greetings from Lothlórien"); g_assert_cmpstr (mu_msg_get_summary(msg,5),==,