Changeset: 1f68923051a6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1f68923051a6
Modified Files:
sql/storage/objectset.c
Branch: nospare
Log Message:
Simplify code and fix going-empty object set.
diffs (63 lines):
diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -79,9 +79,19 @@ hash_delete(sql_hash *h, void *data)
}
}
-// TODO: check double hash_delete and fix prev pointer
+static void
+node_destroy(objectset *os, object_node *n)
+{
+ if (n->data && os->destroy) {
+ os->destroy(NULL, n->data);
+ n->data = NULL;
+ }
+ if (!os->sa)
+ _DELETE(n);
+}
+
static object_node *
-os_remove_node_(objectset *os, object_node *n)
+os_remove_node(objectset *os, object_node *n)
{
void *data = n->data;
object_node *p = os->h;
@@ -92,7 +102,8 @@ os_remove_node_(objectset *os, object_no
assert(p==n||(p && p->next == n));
if (p == n) {
os->h = n->next;
- os->h->prev = NULL;
+ if (os->h) // i.e. non-empty os
+ os->h->prev = NULL;
p = NULL;
} else if ( p != NULL) {
p->next = n->next;
@@ -111,26 +122,8 @@ os_remove_node_(objectset *os, object_no
}
os->cnt--;
assert(os->cnt > 0 || os->h == NULL);
- return p;
-}
-static void
-node_destroy(objectset *os, object_node *n)
-{
- if (n->data && os->destroy) {
- os->destroy(NULL, n->data);
- n->data = NULL;
- }
- if (!os->sa)
- _DELETE(n);
-}
-
-static object_node *
-os_remove_node(objectset *l, object_node *n)
-{
- object_node *p = os_remove_node_(l, n);
-
- node_destroy(l, n);
+ node_destroy(os, n);
return p;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list