Skip to content

Commit 441adf8

Browse files
authored
Merge pull request #3851 from BsAtHome/fix_py-none-crash
Fix python crash due to missing Py_None reference counting increase
2 parents 789e716 + a2fb3ba commit 441adf8

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

src/hal/halmodule.cc

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,7 @@ static PyObject *pyhal_ready(PyObject *_self, PyObject * /*o*/) {
544544
EXCEPTION_IF_NOT_LIVE(NULL);
545545
int res = hal_ready(self->hal_id);
546546
if(res) return pyhal_error(res);
547+
Py_INCREF(Py_None);
547548
return Py_None;
548549
}
549550

@@ -553,12 +554,14 @@ static PyObject *pyhal_unready(PyObject *_self, PyObject * /*o*/) {
553554
EXCEPTION_IF_NOT_LIVE(NULL);
554555
int res = hal_unready(self->hal_id);
555556
if(res) return pyhal_error(res);
557+
Py_INCREF(Py_None);
556558
return Py_None;
557559
}
558560

559561
static PyObject *pyhal_exit(PyObject *_self, PyObject * /*o*/) {
560562
halobject *self = reinterpret_cast<halobject *>(_self);
561563
pyhal_exit_impl(self);
564+
Py_INCREF(Py_None);
562565
return Py_None;
563566
}
564567

@@ -597,8 +600,10 @@ static PyObject *pyhal_get_prefix(PyObject *_self, PyObject *args) {
597600
if(!PyArg_ParseTuple(args, "")) return NULL;
598601
EXCEPTION_IF_NOT_LIVE(NULL);
599602

600-
if(!self->prefix)
601-
return Py_None;
603+
if(!self->prefix) {
604+
Py_INCREF(Py_None);
605+
return Py_None;
606+
}
602607

603608
return PyUnicode_FromString(self->prefix);
604609
}
@@ -619,6 +624,7 @@ static PyObject *pyhal_set_prefix(PyObject *_self, PyObject *args) {
619624
return NULL;
620625
}
621626

627+
Py_INCREF(Py_None);
622628
return Py_None;
623629
}
624630

@@ -772,6 +778,7 @@ static PyObject * pyhal_pin_set(PyObject * _self, PyObject * value) {
772778
pyhalitem * self = reinterpret_cast<pyhalitem *>(_self);
773779
if (pyhal_write_common(&self->pin, value) == -1)
774780
return NULL;
781+
Py_INCREF(Py_None);
775782
return Py_None;
776783
}
777784

@@ -800,8 +807,10 @@ static PyObject * pyhal_pin_is_pin(PyObject * _self, PyObject *) {
800807

801808
static PyObject * pyhal_pin_get_name(PyObject * _self, PyObject *) {
802809
pyhalitem * self = reinterpret_cast<pyhalitem *>(_self);
803-
if (!self->name)
804-
return Py_None;
810+
if (!self->name) {
811+
Py_INCREF(Py_None);
812+
return Py_None;
813+
}
805814
return PyUnicode_FromString(self->name);
806815
}
807816

@@ -1588,6 +1597,7 @@ static PyObject *pyshm_repr(PyObject *_self) {
15881597
static PyObject *shm_setsize(PyObject *_self, PyObject *args) {
15891598
shmobject *self = reinterpret_cast<shmobject *>(_self);
15901599
if(!PyArg_ParseTuple(args, "k", &self->size)) return NULL;
1600+
Py_INCREF(Py_None);
15911601
return Py_None;
15921602
}
15931603

@@ -1603,6 +1613,7 @@ static PyObject *set_msg_level(PyObject * /*_self*/, PyObject *args) {
16031613
if(!PyArg_ParseTuple(args, "i", &level)) return NULL;
16041614
res = rtapi_set_msg_level(level);
16051615
if(res) return pyhal_error(res);
1616+
Py_INCREF(Py_None);
16061617
return Py_None;
16071618
}
16081619

@@ -1753,11 +1764,15 @@ static int pystream_init(PyObject *_self, PyObject *args, PyObject * /*kw*/) {
17531764
PyObject *stream_read(PyObject *_self, PyObject * /*unused*/) {
17541765
streamobj *self = reinterpret_cast<streamobj *>(_self);
17551766
int n = PyBytes_Size(self->pyelt);
1756-
if(n <= 0)
1767+
if(n <= 0) {
1768+
Py_INCREF(Py_None);
17571769
return Py_None;
1770+
}
17581771
vector<hal_stream_data> buf(n);
1759-
if(hal_stream_read(&self->stream, buf.data(), &self->sampleno) < 0)
1772+
if(hal_stream_read(&self->stream, buf.data(), &self->sampleno) < 0) {
1773+
Py_INCREF(Py_None);
17601774
return Py_None;
1775+
}
17611776

17621777
PyObject *r = PyTuple_New(n);
17631778
if(!r) return 0;
@@ -1811,6 +1826,7 @@ PyObject *stream_write(PyObject *_self, PyObject *args) {
18111826
if(r < 0) {
18121827
errno = -r; PyErr_SetFromErrno(PyExc_IOError); return 0;
18131828
}
1829+
Py_INCREF(Py_None);
18141830
return Py_None;
18151831
}
18161832

0 commit comments

Comments
 (0)