Skip to content

is_on() sometimes freezes cec #49

@mjm987

Description

@mjm987

When using is_on() on a Raspberry Pi, the cec driver sometimes freezes completely so a reboot of the Raspi is needed to recover cec functionality.
Possibly this crash is caused when my TV does not respond to the request.
May be it is a problem in libcec or the raspi kernel driver (?) but I had a quick look in this projects device.cpp file on function Device_is_on(Device * self) and saw that a reference counting is done on a local variable. Isn't this wrong?

I suggest following correction:

--- device.cpp	2020-12-16 17:50:54.178413383 +0100
+++ b.cpp	2020-12-16 17:52:34.042359608 +0100
@@ -85,23 +85,20 @@
    Py_BEGIN_ALLOW_THREADS
    power = adapter->GetDevicePowerStatus(self->addr);
    Py_END_ALLOW_THREADS
-   PyObject * ret;
    switch(power) {
       case CEC_POWER_STATUS_ON:
       case CEC_POWER_STATUS_IN_TRANSITION_ON_TO_STANDBY:
-         ret = Py_True;
+         Py_RETURN_TRUE;
          break;
       case CEC_POWER_STATUS_STANDBY:
       case CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON:
-         ret = Py_False;
+         Py_RETURN_FALSE;
          break;
       case CEC_POWER_STATUS_UNKNOWN:
       default:
          PyErr_SetString(PyExc_IOError, "Power status not found");
          return NULL;
    }
-   Py_INCREF(ret);
-   return ret;
 }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions