Skip to content

is_on() sometimes freezes cec #49

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;
 }

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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