[65568] trunk/base/src/cregistry/registry.c
raimue at macports.org
raimue at macports.org
Sat Mar 27 19:16:48 PDT 2010
Revision: 65568
http://trac.macports.org/changeset/65568
Author: raimue at macports.org
Date: 2010-03-27 19:16:46 -0700 (Sat, 27 Mar 2010)
Log Message:
-----------
cregistry:
Fix "SQL logic error or missing database" which could happen when running
multiple port commands in parallel:
Need sqlite3_reset() before executing query with sqlite3_step() again.
Modified Paths:
--------------
trunk/base/src/cregistry/registry.c
Modified: trunk/base/src/cregistry/registry.c
===================================================================
--- trunk/base/src/cregistry/registry.c 2010-03-28 02:11:30 UTC (rev 65567)
+++ trunk/base/src/cregistry/registry.c 2010-03-28 02:16:46 UTC (rev 65568)
@@ -196,8 +196,9 @@
if (initialized || can_write) {
sqlite3_stmt* stmt;
char* query = sqlite3_mprintf("ATTACH DATABASE '%q' AS registry", path);
- if (sqlite3_prepare(reg->db, query, -1, &stmt, NULL) == SQLITE_OK) {
+ if (sqlite3_prepare_v2(reg->db, query, -1, &stmt, NULL) == SQLITE_OK) {
int r;
+ /* XXX: Busy waiting, consider using sqlite3_busy_handler/timeout */
do {
r = sqlite3_step(stmt);
switch (r) {
@@ -214,6 +215,7 @@
default:
reg_sqlite_error(reg->db, errPtr, query);
}
+ sqlite3_reset(stmt);
} while (r == SQLITE_BUSY);
} else {
reg_sqlite_error(reg->db, errPtr, query);
@@ -244,11 +246,12 @@
reg_throw(errPtr,REG_MISUSE,"no database is attached to this registry");
return 0;
}
- if (sqlite3_prepare(reg->db, query, -1, &stmt, NULL) == SQLITE_OK) {
+ if (sqlite3_prepare_v2(reg->db, query, -1, &stmt, NULL) == SQLITE_OK) {
int r;
reg_entry* entry;
Tcl_HashEntry* curr;
Tcl_HashSearch search;
+ /* XXX: Busy waiting, consider using sqlite3_busy_handler/timeout */
do {
r = sqlite3_step(stmt);
switch (r) {
@@ -271,6 +274,7 @@
reg_sqlite_error(reg->db, errPtr, query);
break;
}
+ sqlite3_reset(stmt);
} while (r == SQLITE_BUSY);
} else {
reg_sqlite_error(reg->db, errPtr, query);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20100327/5bc8d339/attachment.html>
More information about the macports-changes
mailing list