[Midnightbsd-cvs] src [7677] trunk/lib/libmport/stats.c: protect stats with serial queue for db queries
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sun Aug 7 02:03:59 EDT 2016
Revision: 7677
http://svnweb.midnightbsd.org/src/?rev=7677
Author: laffer1
Date: 2016-08-07 02:03:58 -0400 (Sun, 07 Aug 2016)
Log Message:
-----------
protect stats with serial queue for db queries
Modified Paths:
--------------
trunk/lib/libmport/stats.c
Modified: trunk/lib/libmport/stats.c
===================================================================
--- trunk/lib/libmport/stats.c 2016-08-07 06:02:23 UTC (rev 7676)
+++ trunk/lib/libmport/stats.c 2016-08-07 06:03:58 UTC (rev 7677)
@@ -27,27 +27,37 @@
MPORT_PUBLIC_API int
mport_stats(mportInstance *mport, mportStats **stats)
{
- sqlite3_stmt *stmt;
- sqlite3 *db = mport->db;
- mportStats *s;
+ __block sqlite3_stmt *stmt;
+ __block sqlite3 *db = mport->db;
+ __block mportStats *s;
+ __block int result = MPORT_OK;
+ __block char *err;
- if ((s = mport_stats_new()) == NULL)
- RETURN_ERROR(MPORT_ERR_FATAL, "Out of memory.");
+ if ((s = mport_stats_new()) == NULL)
+ RETURN_ERROR(MPORT_ERR_FATAL, "Out of memory.");
- *stats = s;
+ *stats = s;
- if (mport_db_prepare(db, &stmt, "SELECT COUNT(*) FROM packages") != MPORT_OK) {
+ if (mport_db_prepare(db, &stmt, "SELECT COUNT(*) FROM packages") != MPORT_OK) {
sqlite3_finalize(stmt);
RETURN_CURRENT_ERROR;
}
- if (sqlite3_step(stmt) != SQLITE_ROW) {
- sqlite3_finalize(stmt);
- RETURN_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(db));
- }
+ dispatch_sync(mportSQLSerial, ^{
+ if (sqlite3_step(stmt) != SQLITE_ROW) {
+ sqlite3_finalize(stmt);
+ err = (char *) sqlite3_errmsg(db);
+ result = MPORT_ERR_FATAL;
+ return;
+ }
- s->pkg_installed = (unsigned int) sqlite3_column_int(stmt, 0);
- sqlite3_finalize(stmt);
+ s->pkg_installed = (unsigned int) sqlite3_column_int(stmt, 0);
+ sqlite3_finalize(stmt);
+ });
+ if (result == MPORT_ERR_FATAL) {
+ SET_ERRORX(result, "%s", err);
+ return result;
+ }
if (mport_db_prepare(db, &stmt, "SELECT COUNT(*) FROM idx.packages") != MPORT_OK) {
sqlite3_finalize(stmt);
@@ -54,13 +64,19 @@
RETURN_CURRENT_ERROR;
}
- if (sqlite3_step(stmt) != SQLITE_ROW) {
- sqlite3_finalize(stmt);
- RETURN_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(db));
- }
+ dispatch_sync(mportSQLSerial, ^{
+ if (sqlite3_step(stmt) != SQLITE_ROW) {
+ sqlite3_finalize(stmt);
+ err = (char *) sqlite3_errmsg(db);
+ result = MPORT_ERR_FATAL;
+ return;
+ }
- s->pkg_available = (unsigned int) sqlite3_column_int(stmt, 0);
- sqlite3_finalize(stmt);
+ s->pkg_available = (unsigned int) sqlite3_column_int(stmt, 0);
+ sqlite3_finalize(stmt);
+ });
- return (MPORT_OK);
+ if (result == MPORT_ERR_FATAL)
+ SET_ERRORX(result, "%s", err);
+ return result;
}
More information about the Midnightbsd-cvs
mailing list