Changeset: cf80e6fefe3c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cf80e6fefe3c
Modified Files:
        sql/server/sql_mvc.c
        sql/storage/store.c
Branch: HTM
Log Message:

Make sure the store gets unlocked errors
Also make sure the original mvc_commit has one continiuous lock, while the 
mvc_precommit unlocks it at the end. In line of that mvc_persistcommmit lock 
the store in the very beginning.


diffs (59 lines):

diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -285,12 +285,14 @@ mvc_commit(mvc *m, int chain, char *name
        int ok = SQL_OK;//, wait = 0;
 
        if ((ok = mvc_commit_prepare(m, chain, name, tr)) != SQL_OK) {
+               store_unlock();
                return 0;
        }
 
        if (sql_trans_validate(tr)) {
                /* execute commit */
                if ((ok = sql_trans_commit(tr)) != SQL_OK) {
+                       store_unlock();
                        char *msg = sql_message("40000!COMMIT: transaction 
commit failed (perhaps your disk is full?) exiting (kernel error: %s)", 
GDKerrbuf);
                        GDKfatal("%s", msg);
                        _DELETE(msg);
@@ -313,11 +315,13 @@ mvc_precommit(mvc *m, int chain, char *n
        int ok = SQL_OK;//, wait = 0;
 
        if ((ok = mvc_commit_prepare(m, chain, name, tr)) != SQL_OK) {
+               store_unlock();
                return 0;
        }
 
        if (sql_trans_validate(tr)) {
                if ((ok = sql_trans_precommit(tr)) != SQL_OK) {
+                       store_unlock();
                        char *msg = sql_message("40000!COMMIT: transaction 
commit failed (perhaps your disk is full?) exiting (kernel error: %s)", 
GDKerrbuf);
                        GDKfatal("%s", msg);
                        _DELETE(msg);
@@ -329,6 +333,7 @@ mvc_precommit(mvc *m, int chain, char *n
                return NULL;
        }
 
+       store_unlock();
        return tr;
 }
 
@@ -336,6 +341,7 @@ int
 mvc_persistcommit(mvc *m, int chain, char *name, sql_trans *tr) {
        int ok = SQL_OK;//, wait = 0;
 
+       store_lock();
        if ((ok = sql_trans_persistcommit(tr)) != SQL_OK) {
                char *msg = sql_message("40000!COMMIT: transaction commit 
failed (perhaps your disk is full?) exiting (kernel error: %s)", GDKerrbuf);
                GDKfatal("%s", msg);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3257,6 +3257,7 @@ sql_trans_precommit(sql_trans *tr)
 {
        int ok = LOG_OK;
 
+       store_lock();
        /* snap shots should be saved first */
        if (tr->parent == gtrans) {
                if (bs_debug) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to