Skip to content

File dp_interrupt_pyadopt.h

File List > inc > dp_interrupt_pyadopt.h

Go to the documentation of this file

#ifndef DP_INTERRUPT_PYADOPT_H
#define DP_INTERRUPT_PYADOPT_H

#include <Python.h>

#include "dp_interrupt_guard/dp_interrupt_guard_procglobal.h"

static inline int
dp_interrupt_pyadopt (PyObject *m)
{
  PyObject *own = PyImport_ImportModule (DP_INTERRUPT_GUARD_PG_OWNER);
  if (!own)
    {
      Py_DECREF (m);
      return 0;
    }
  PyObject *pg = PyObject_GetAttrString (own, DP_INTERRUPT_GUARD_PG_ATTR);
  Py_DECREF (own);
  if (!pg)
    {
      Py_DECREF (m);
      return 0;
    }
  void *p = PyCapsule_GetPointer (pg, DP_INTERRUPT_GUARD_PG_CAPSULE);
  Py_DECREF (pg);
  if (!p)
    {
      Py_DECREF (m);
      return 0;
    }
  dp_interrupt_guard_state_adopt (p);
  return 1;
}

#endif /* DP_INTERRUPT_PYADOPT_H */