[geany/geany-plugins] 95133e: debugger/gdb_mi: Do not allocate values when reading invalid input

Colomban Wendling git-noreply at xxxxx
Sun Feb 7 03:35:36 UTC 2016


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Sun, 07 Feb 2016 03:35:36 UTC
Commit:      95133ee30874e100ddc641289f164eb4c9d0734b
             https://github.com/geany/geany-plugins/commit/95133ee30874e100ddc641289f164eb4c9d0734b

Log Message:
-----------
debugger/gdb_mi: Do not allocate values when reading invalid input

Only allocate a value structure in parse_value() if the input actually
contains a readable value, instead of destroying it if it doesn't.

This is particularly useful as the implementation of parse_value()
itself recurses in order to discriminate a value from a result, which
means that a value would be allocated and freed immediately for each
result in the input.

This gives a speedup of about 10% on typical data.


Modified Paths:
--------------
    debugger/src/gdb_mi.c

Modified: debugger/src/gdb_mi.c
9 lines changed, 3 insertions(+), 6 deletions(-)
===================================================================
@@ -211,15 +211,17 @@ static gboolean parse_result(struct gdb_mi_result *result, const gchar **p)
  * Actually, this is more permissive and allows mixed tuples/lists */
 static struct gdb_mi_value *parse_value(const gchar **p)
 {
-	struct gdb_mi_value *val = g_malloc0(sizeof *val);
+	struct gdb_mi_value *val = NULL;
 	if (**p == '"')
 	{
+		val = g_malloc0(sizeof *val);
 		val->type = GDB_MI_VAL_STRING;
 		val->string = parse_cstring(p);
 	}
 	else if (**p == '{' || **p == '[')
 	{
 		struct gdb_mi_result *prev = NULL;
+		val = g_malloc0(sizeof *val);
 		val->type = GDB_MI_VAL_LIST;
 		gchar end = **p == '{' ? '}' : ']';
 		(*p)++;
@@ -248,11 +250,6 @@ static struct gdb_mi_value *parse_value(const gchar **p)
 		if (**p == end)
 			(*p)++;
 	}
-	else
-	{
-		gdb_mi_value_free(val);
-		val = NULL;
-	}
 	return val;
 }
 



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Plugins-Commits mailing list