summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUwe Hermann <uwe@hermann-uwe.de>2018-05-19 00:19:54 +0200
committerUwe Hermann <uwe@hermann-uwe.de>2018-05-19 00:19:54 +0200
commitee63c5dd93c4dfb1d2b19377eba96f96afac02a3 (patch)
treed6d7aae9732355d094676fbe605624c84baf695e
parent996b17db506ceb435ae3ed53d4c6ac66e10c7b34 (diff)
downloadlibsigrokdecode-ee63c5dd93c4dfb1d2b19377eba96f96afac02a3.tar.gz
libsigrokdecode-ee63c5dd93c4dfb1d2b19377eba96f96afac02a3.zip
Decoder_put(): Avoid a g_malloc()/g_free() pair per annotation.
-rw-r--r--type_decoder.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/type_decoder.c b/type_decoder.c
index 59fb049..19cce0c 100644
--- a/type_decoder.c
+++ b/type_decoder.c
@@ -50,7 +50,6 @@ static void release_annotation(struct srd_proto_data_annotation *pda)
return;
if (pda->ann_text)
g_strfreev(pda->ann_text);
- g_free(pda);
}
static int convert_annotation(struct srd_decoder_inst *di, PyObject *obj,
@@ -110,10 +109,9 @@ static int convert_annotation(struct srd_decoder_inst *di, PyObject *obj,
goto err;
}
- pda = g_malloc(sizeof(struct srd_proto_data_annotation));
+ pda = pdata->data;
pda->ann_class = ann_class;
pda->ann_text = ann_text;
- pdata->data = pda;
PyGILState_Release(gstate);
@@ -325,6 +323,7 @@ static PyObject *Decoder_put(PyObject *self, PyObject *args)
struct srd_decoder_inst *di, *next_di;
struct srd_pd_output *pdo;
struct srd_proto_data pdata;
+ struct srd_proto_data_annotation pda;
uint64_t start_sample, end_sample;
int output_id;
struct srd_pd_callback *cb;
@@ -370,6 +369,7 @@ static PyObject *Decoder_put(PyObject *self, PyObject *args)
case SRD_OUTPUT_ANN:
/* Annotations are only fed to callbacks. */
if ((cb = srd_pd_output_callback_find(di->sess, pdo->output_type))) {
+ pdata.data = &pda;
/* Convert from PyDict to srd_proto_data_annotation. */
if (convert_annotation(di, py_data, &pdata) != SRD_OK) {
/* An error was already logged. */