Skip to content

Commit 41438b2

Browse files
committed
Issue #65: Better memory management
1 parent 0e550f0 commit 41438b2

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,15 +136,19 @@ Returns value of a GPIO *pin*, or *None* is the pin is not configured as input (
136136

137137
For example:
138138
```python
139+
print(get_gpio_inputs())
140+
[1]
139141
print(reader.gpi_get(1))
140142
True
141143
```
142144

143145
#### reader.gpo_set(*pin*, *value*)
144-
Sets value of a GPIO *pin* configured as output (see `get_gpio_inputs`).
146+
Sets value of a GPIO *pin* configured as output (see `get_gpio_outputs`).
145147

146148
For example:
147149
```python
150+
print(get_gpio_outputs())
151+
[1]
148152
reader.gpo_set(1, False)
149153
```
150154

@@ -284,6 +288,10 @@ Get numbers of the GPIO pins available as output pins on the device.
284288
#### reader.set_gpio_outputs(*list*)
285289
Set numbers of the GPIO pins available as output pins on the device.
286290

291+
On some devices this parameter is not writeable. Thus, instead of calling
292+
`set_gpio_outputs` with the a set you may need to call `set_gpio_inputs`
293+
with the pin omitted.
294+
287295
#### reader.get_gen2_blf()
288296
Returns the current Gen2 BLF setting.
289297

mercury.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,8 @@ Reader_read(Reader *self, PyObject *args, PyObject *kwds)
340340

341341
/* create empty list */
342342
list = PyList_New(0);
343+
if(list == NULL)
344+
return PyErr_NoMemory();
343345

344346
while (TMR_hasMoreTags(&self->reader) == TMR_SUCCESS)
345347
{
@@ -350,7 +352,16 @@ Reader_read(Reader *self, PyObject *args, PyObject *kwds)
350352
uint8_t dataBuf4[MAX_DATA_AREA];
351353

352354
tag = PyObject_New(TagReadData, &TagReadDataType);
355+
if(tag == NULL)
356+
{
357+
Py_XDECREF(list);
358+
return PyErr_NoMemory();
359+
}
353360
TMR_TRD_init(&tag->data);
361+
tag->epcMemData = NULL;
362+
tag->tidMemData = NULL;
363+
tag->userMemData = NULL;
364+
tag->reservedMemData = NULL;
354365

355366
TMR_TRD_MEMBANK_init_data(&tag->data.epcMemData, MAX_DATA_AREA, dataBuf1);
356367
TMR_TRD_MEMBANK_init_data(&tag->data.tidMemData, MAX_DATA_AREA, dataBuf2);
@@ -360,6 +371,8 @@ Reader_read(Reader *self, PyObject *args, PyObject *kwds)
360371
if ((ret = TMR_getNextTag(&self->reader, &tag->data)) != TMR_SUCCESS)
361372
{
362373
PyErr_SetString(PyExc_RuntimeError, TMR_strerr(&self->reader, ret));
374+
Py_XDECREF(tag);
375+
Py_XDECREF(list);
363376
return NULL;
364377
}
365378

@@ -435,6 +448,10 @@ invoke_read_callback(TMR_Reader *reader, const TMR_TagReadData *pdata, void *coo
435448
tag = PyObject_New(TagReadData, &TagReadDataType);
436449
/* make a hard-copy */
437450
memcpy(&tag->data, pdata, sizeof(TMR_TagReadData));
451+
tag->epcMemData = NULL;
452+
tag->tidMemData = NULL;
453+
tag->userMemData = NULL;
454+
tag->reservedMemData = NULL;
438455

439456
arglist = Py_BuildValue("(O)", tag);
440457
result = PyObject_CallObject(self->readCallback, arglist);
@@ -645,6 +662,8 @@ Reader_get_supported_regions(Reader* self)
645662

646663
/* create empty list */
647664
list = PyList_New(0);
665+
if(list == NULL)
666+
return PyErr_NoMemory();
648667

649668
for (i = 0; i < regions.len; i++)
650669
{
@@ -713,6 +732,9 @@ get_uint8List(TMR_Reader *reader, int param, size_t max)
713732
}
714733

715734
result = PyList_New(values.len);
735+
if(result == NULL)
736+
return PyErr_NoMemory();
737+
716738
for (i = 0; i < values.len; i++)
717739
PyList_SetItem(result, i, PyLong_FromUnsignedLong(values.list[i]));
718740

@@ -740,6 +762,9 @@ get_uint32List(TMR_Reader *reader, int param, size_t max)
740762
}
741763

742764
result = PyList_New(values.len);
765+
if(result == NULL)
766+
return PyErr_NoMemory();
767+
743768
for (i = 0; i < values.len; i++)
744769
PyList_SetItem(result, i, PyLong_FromUnsignedLong(values.list[i]));
745770

0 commit comments

Comments
 (0)