[tracker/wip/carlosg/sparql1.1: 140/145] libtracker-data: Only restore token if necessary
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/carlosg/sparql1.1: 140/145] libtracker-data: Only restore token if necessary
- Date: Thu, 18 Jul 2019 22:35:48 +0000 (UTC)
commit 04062747dba840f0b66d392e8c77f6b3f0d2e89b
Author: Carlos Garnacho <carlosg gnome org>
Date: Wed Jul 17 02:17:26 2019 +0200
libtracker-data: Only restore token if necessary
Doing this is no longer ok since the TrackerToken may hold
non-static memory. Ensure we don't unset the wrong token in that
case.
src/libtracker-data/tracker-sparql.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index df4f3b07f..8908f49e6 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -3755,6 +3755,7 @@ translate_InsertClause (TrackerSparql *sparql,
GError **error)
{
TrackerToken old_graph;
+ gboolean into = FALSE;
/* InsertClause ::= 'INSERT' QuadPattern
*
@@ -3769,8 +3770,6 @@ translate_InsertClause (TrackerSparql *sparql,
sparql->current_state.blank_node_map =
g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
- old_graph = sparql->current_state.graph;
-
sparql->current_state.type = TRACKER_SPARQL_TYPE_INSERT;
_expect (sparql, RULE_TYPE_LITERAL, LITERAL_INSERT);
@@ -3784,15 +3783,19 @@ translate_InsertClause (TrackerSparql *sparql,
sparql->silent = _accept (sparql, RULE_TYPE_LITERAL, LITERAL_SILENT);
if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_INTO)) {
+ old_graph = sparql->current_state.graph;
_call_rule (sparql, NAMED_RULE_iri, error);
_init_token (&sparql->current_state.graph,
sparql->current_state.prev_node, sparql);
+ into = TRUE;
}
_call_rule (sparql, NAMED_RULE_QuadPattern, error);
- tracker_token_unset (&sparql->current_state.graph);
- sparql->current_state.graph = old_graph;
+ if (into) {
+ tracker_token_unset (&sparql->current_state.graph);
+ sparql->current_state.graph = old_graph;
+ }
if (sparql->blank_nodes) {
g_variant_builder_close (sparql->blank_nodes);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]