summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Azzarone <andrea.azzarone@canonical.com>2019-01-23 19:25:45 +0000
committerAndrea Azzarone <andrea.azzarone@canonical.com>2019-02-13 14:06:22 +0000
commitf502e6321d62be8be27db8ec7bafa3cd2a223ada (patch)
treefc58245417aa927c95e52e420d100b87cbccb4e6
parenta7be8e9cc19bb53867d28e323fd2da32073e48cf (diff)
downloadtracker-f502e6321d62be8be27db8ec7bafa3cd2a223ada.tar.gz
libtracker-data: Use GLib.Queue instead of native Vala arrays
Removing elements from a native vala array can cause memory leaks. Let's use GLib.Queue both for subject_stack and subject_stack.
-rw-r--r--src/libtracker-data/tracker-turtle-reader.vala21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/libtracker-data/tracker-turtle-reader.vala b/src/libtracker-data/tracker-turtle-reader.vala
index 5bebdc432..662ce8f43 100644
--- a/src/libtracker-data/tracker-turtle-reader.vala
+++ b/src/libtracker-data/tracker-turtle-reader.vala
@@ -17,6 +17,8 @@
* Boston, MA 02110-1301, USA.
*/
+using GLib;
+
public class Tracker.TurtleReader : Object {
SparqlScanner scanner;
@@ -56,8 +58,8 @@ public class Tracker.TurtleReader : Object {
HashTable<string,string> prefix_map;
- string[] subject_stack;
- string[] predicate_stack;
+ GLib.Queue<string> subject_stack;
+ GLib.Queue<string> predicate_stack;
int bnodeid = 0;
// base UUID used for blank nodes
@@ -88,6 +90,8 @@ public class Tracker.TurtleReader : Object {
tokens = new TokenInfo[BUFFER_SIZE];
prefix_map = new HashTable<string,string>.full (str_hash, str_equal, g_free, g_free);
+ subject_stack = new GLib.Queue<string> ();
+ predicate_stack = new GLib.Queue<string> ();
}
private string generate_bnodeid (string? user_bnodeid) {
@@ -266,8 +270,8 @@ public class Tracker.TurtleReader : Object {
return true;
} else if (accept (SparqlTokenType.OPEN_BRACKET)) {
// begin of anonymous blank node
- subject_stack += subject;
- predicate_stack += predicate;
+ subject_stack.push_tail (subject);
+ predicate_stack.push_tail (predicate);
subject = generate_bnodeid (null);
state = State.SUBJECT;
continue;
@@ -355,18 +359,15 @@ public class Tracker.TurtleReader : Object {
}
state = State.SUBJECT;
continue;
- } else if (subject_stack.length > 0) {
+ } else if (!subject_stack.is_empty()) {
// end of anonymous blank node
expect (SparqlTokenType.CLOSE_BRACKET);
object = subject;
object_is_uri = true;
- subject = subject_stack[subject_stack.length - 1];
- subject_stack.length--;
-
- predicate = predicate_stack[predicate_stack.length - 1];
- predicate_stack.length--;
+ subject = subject_stack.pop_tail();
+ predicate = predicate_stack.pop_tail();
state = State.OBJECT;
return true;