diff --git a/src/frontend/parser.c b/src/frontend/parser.c
index b0ae01a55bf618ee02f44e3098c290dec273c383..785b7e40b59caecc3f34d5e8660f7d04f918e397 100644 (file)
--- a/src/frontend/parser.c
+++ b/src/frontend/parser.c
}
node = SDB_CONN_NODE(sdb_llist_get(yyextra.parsetree, 0));
- if (! node)
+ if (! node) {
+ sdb_llist_destroy(yyextra.parsetree);
return NULL;
+ }
- if (node->cmd == CONNECTION_MATCHER)
+ if (node->cmd == CONNECTION_MATCHER) {
m = CONN_MATCHER(node)->matcher;
+ CONN_MATCHER(node)->matcher = NULL;
+ }
else
m = NULL;
- CONN_MATCHER(node)->matcher = NULL;
sdb_llist_destroy(yyextra.parsetree);
sdb_object_deref(SDB_OBJ(node));
return m;
}
node = SDB_CONN_NODE(sdb_llist_get(yyextra.parsetree, 0));
- if (! node)
+ if (! node) {
+ sdb_llist_destroy(yyextra.parsetree);
return NULL;
+ }
- if (node->cmd == CONNECTION_EXPR)
+ if (node->cmd == CONNECTION_EXPR) {
e = CONN_EXPR(node)->expr;
+ CONN_EXPR(node)->expr = NULL;
+ }
else
e = NULL;
- CONN_EXPR(node)->expr = NULL;
sdb_llist_destroy(yyextra.parsetree);
sdb_object_deref(SDB_OBJ(node));
return e;