Changeset: 6a183fdbd26f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6a183fdbd26f
Modified Files:
sql/storage/store_sequence.c
Branch: default
Log Message:
Allocation checks
diffs (83 lines):
diff --git a/sql/storage/store_sequence.c b/sql/storage/store_sequence.c
--- a/sql/storage/store_sequence.c
+++ b/sql/storage/store_sequence.c
@@ -89,12 +89,13 @@ sequence_lookup( sql_hash *h, sqlid id)
}
/* lock is held */
-static void
+static store_sequence *
update_sequence(sqlstore *store, store_sequence *s)
{
- if (!s->intrans)
- list_append(store->seqchanges, s);
+ if (!s->intrans && !list_append(store->seqchanges, s))
+ return NULL;
s->intrans = true;
+ return s;
}
/* lock is held */
@@ -145,8 +146,13 @@ seq_restart(sql_store Store, sql_sequenc
}
}
}
+ lng ocur = s->cur;
s->cur = start;
- update_sequence(store, s);
+ if (!update_sequence(store, s)) {
+ s->cur = ocur;
+ sequences_unlock(store);
+ return 0;
+ }
sequences_unlock(store);
return 1;
}
@@ -188,9 +194,14 @@ seqbulk_next_value(sql_store Store, sql_
if (0 < cnt && !seq->cycle && !(max > 0 && s->cur < 0)) {
if ((max - s->cur) >= ((cnt-1) * inc)) {
+ lng ocur = s->cur;
s->cur += inc * cnt;
- update_sequence(store, s);
+ if (!update_sequence(store, s)) {
+ s->cur = ocur;
+ sequences_unlock(store);
+ return 0;
+ }
sequences_unlock(store);
store_unlocked = true;
} else {
@@ -210,9 +221,14 @@ seqbulk_next_value(sql_store Store, sql_
if (0 < cnt && !seq->cycle && !(min < 0 && s->cur > 0)) {
if ((s->cur - min) >= ((cnt-1) * inc)) {
+ lng ocur = s->cur;
s->cur -= inc * cnt;
- update_sequence(store, s);
+ if (!update_sequence(store, s)) {
+ s->cur = ocur;
+ sequences_unlock(store);
+ return 0;
+ }
sequences_unlock(store);
store_unlocked = true;
} else {
@@ -230,9 +246,14 @@ seqbulk_next_value(sql_store Store, sql_
}
if (!store_unlocked) {
+ lng ocur = s->cur;
s->cur = cur;
- update_sequence(store, s);
+ if (!update_sequence(store, s)) {
+ s->cur = ocur;
+ sequences_unlock(store);
+ return 0;
+ }
sequences_unlock(store);
}
return 1;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]