[Midnightbsd-cvs] src [7370] trunk/lib/libmport: fix several dispatch queues

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Sat Nov 28 19:47:28 EST 2015


Revision: 7370
          http://svnweb.midnightbsd.org/src/?rev=7370
Author:   laffer1
Date:     2015-11-28 19:47:27 -0500 (Sat, 28 Nov 2015)
Log Message:
-----------
fix several dispatch queues

Modified Paths:
--------------
    trunk/lib/libmport/clean.c
    trunk/lib/libmport/db.c
    trunk/lib/libmport/instance.c

Modified: trunk/lib/libmport/clean.c
===================================================================
--- trunk/lib/libmport/clean.c	2015-11-28 23:55:49 UTC (rev 7369)
+++ trunk/lib/libmport/clean.c	2015-11-29 00:47:27 UTC (rev 7370)
@@ -41,7 +41,7 @@
 mport_clean_database(mportInstance *mport) {
     __block int error_code = MPORT_OK;
 
-    dispatch_sync(mportTaskSerial, ^(int){
+    dispatch_sync(mportTaskSerial, ^{
         if (mport_db_do(mport->db, "vacuum") != MPORT_OK)
             error_code = mport_err_code();
         error_code = MPORT_OK;
@@ -58,10 +58,12 @@
         struct dirent *de;
         DIR *d = opendir(MPORT_FETCH_STAGING_DIR);
 
-        if (d == NULL)
-            RETURN_ERRORX(MPORT_ERR_FATAL, "Couldn't open directory %s: %s", MPORT_FETCH_STAGING_DIR, strerror(errno));
+        if (d == NULL) {
+		error_code = SET_ERRORX(MPORT_ERR_FATAL, "Couldn't open directory %s: %s", MPORT_FETCH_STAGING_DIR, strerror(errno));
+		return;
+	}
 
-        while ((de = readdir(d)) != NULL) {
+            while ((de = readdir(d)) != NULL) {
                 mportIndexEntry **indexEntry;
                 char *path;
                 if (strcmp(".", de->d_name) == 0 || strcmp("..", de->d_name) == 0)
@@ -68,19 +70,21 @@
                     continue;
 
                 if (mport_index_search(mport, &indexEntry, "bundlefile=%Q", de->d_name) != MPORT_OK) {
-                    error_code = mport_err_code();
+			continue;
                 }
 
                 if (indexEntry == NULL || *indexEntry == NULL) {
                     asprintf(&path, "%s/%s", MPORT_FETCH_STAGING_DIR, de->d_name);
-                    if (path != NULL) if (unlink(path) < 0) {
-                        error_code = SET_ERRORX(MPORT_ERR_FATAL, "Could not delete file %s: %s", path, strerror(errno));
-                    }
-                    free(path);
+                    if (path != NULL)  {
+			if (unlink(path) < 0) {
+                       		error_code = SET_ERRORX(MPORT_ERR_FATAL, "Could not delete file %s: %s", path, strerror(errno));
+				mport_call_msg_cb(mport, "%s\n", mport_err_string());
+                    	}
+                    	free(path);
+		    }
                 } else {
                     mport_index_entry_free_vec(indexEntry);
                 }
-
             }
 
             closedir(d);
@@ -87,6 +91,6 @@
 
         });
 
-    return error_code;
+	return error_code;
 }
 

Modified: trunk/lib/libmport/db.c
===================================================================
--- trunk/lib/libmport/db.c	2015-11-28 23:55:49 UTC (rev 7369)
+++ trunk/lib/libmport/db.c	2015-11-29 00:47:27 UTC (rev 7370)
@@ -49,9 +49,8 @@
 mport_db_do(sqlite3 *db, const char *fmt, ...) {
     va_list args;
     char *sql;
-    int sqlcode;
-    int result = MPORT_OK;
-    char *err;
+    __block int result = MPORT_OK;
+    __block char *err;
 
     va_start(args, fmt);
 
@@ -63,7 +62,7 @@
         RETURN_ERROR(MPORT_ERR_FATAL, "Couldn't allocate memory for sql statement");
 
     dispatch_sync(mportSQLSerial, ^{
-        sqlcode = sqlite3_exec(db, sql, 0, 0, 0);
+        int sqlcode = sqlite3_exec(db, sql, 0, 0, 0);
         /* if we get an error code, we want to run it again in some cases */
         if (sqlcode == SQLITE_BUSY || sqlcode == SQLITE_LOCKED) {
             sleep(1);

Modified: trunk/lib/libmport/instance.c
===================================================================
--- trunk/lib/libmport/instance.c	2015-11-28 23:55:49 UTC (rev 7369)
+++ trunk/lib/libmport/instance.c	2015-11-29 00:47:27 UTC (rev 7370)
@@ -53,9 +53,8 @@
  */
 MPORT_PUBLIC_API int
 mport_instance_init(mportInstance *mport, const char *root) {
-    char dir[FILENAME_MAX];
 
-    dispatch_once(&mportInitializeOnce, ^{
+	char dir[FILENAME_MAX];
         mport->flags = 0;
 
         if (root != NULL) {
@@ -68,14 +67,17 @@
 
         (void) snprintf(dir, FILENAME_MAX, "%s/%s", mport->root, MPORT_INST_DIR);
 
-        if (mport_mkdir(dir) != MPORT_OK)
-            RETURN_CURRENT_ERROR;
+        if (mport_mkdir(dir) != MPORT_OK) {
+		RETURN_CURRENT_ERROR;
+	}
 
         (void) snprintf(dir, FILENAME_MAX, "%s/%s", mport->root, MPORT_INST_INFRA_DIR);
 
-        if (mport_mkdir(dir) != MPORT_OK)
-            RETURN_CURRENT_ERROR;
+        if (mport_mkdir(dir) != MPORT_OK) {
+		RETURN_CURRENT_ERROR;
+	}
 
+
         /* dir is a file here, just trying to save memory */
         (void) snprintf(dir, FILENAME_MAX, "%s/%s", mport->root, MPORT_MASTER_DB_FILE);
         if (sqlite3_open(dir, &(mport->db)) != 0) {
@@ -90,6 +92,7 @@
             RETURN_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
         }
 
+
         /* set the default UI callbacks */
         mport->msg_cb = &mport_default_msg_cb;
         mport->progress_init_cb = &mport_default_progress_init_cb;
@@ -98,7 +101,6 @@
         mport->confirm_cb = &mport_default_confirm_cb;
 
         mport_upgrade_master_schema(mport->db, mport_get_database_version(mport->db));
-    });
 
     /* create tables */
     return mport_generate_master_schema(mport->db);
@@ -109,10 +111,10 @@
  */
 int
 mport_get_database_version(sqlite3 *db) {
-    sqlite3_stmt *stmt_version;
-    int databaseVersion = -1; /* ERROR condition */
+    __block int databaseVersion = -1; /* ERROR condition */
 
     dispatch_sync(mportSQLSerial, ^{
+	sqlite3_stmt *stmt_version;
         if (sqlite3_prepare_v2(db, "PRAGMA user_version;", -1, &stmt_version, NULL) == SQLITE_OK) {
             while (sqlite3_step(stmt_version) == SQLITE_ROW) {
                 databaseVersion = sqlite3_column_int(stmt_version, 0);
@@ -176,7 +178,7 @@
 mport_call_msg_cb(mportInstance *mport, const char *fmt, ...) {
     va_list args;
 
-    char *msg;
+    __block char *msg;
     va_start(args, fmt);
     (void) vasprintf(&msg, fmt, args);
     va_end(args);



More information about the Midnightbsd-cvs mailing list