| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- @cython.no_gc_clear
- cdef class UVIdle(UVHandle):
- cdef _init(self, Loop loop, Handle h):
- cdef int err
- self._start_init(loop)
- self._handle = <uv.uv_handle_t*>PyMem_RawMalloc(sizeof(uv.uv_idle_t))
- if self._handle is NULL:
- self._abort_init()
- raise MemoryError()
- err = uv.uv_idle_init(self._loop.uvloop, <uv.uv_idle_t*>self._handle)
- if err < 0:
- self._abort_init()
- raise convert_error(err)
- self._finish_init()
- self.h = h
- self.running = 0
- cdef inline stop(self):
- cdef int err
- if not self._is_alive():
- self.running = 0
- return
- if self.running == 1:
- err = uv.uv_idle_stop(<uv.uv_idle_t*>self._handle)
- self.running = 0
- if err < 0:
- exc = convert_error(err)
- self._fatal_error(exc, True)
- return
- cdef inline start(self):
- cdef int err
- self._ensure_alive()
- if self.running == 0:
- err = uv.uv_idle_start(<uv.uv_idle_t*>self._handle,
- cb_idle_callback)
- if err < 0:
- exc = convert_error(err)
- self._fatal_error(exc, True)
- return
- self.running = 1
- @staticmethod
- cdef UVIdle new(Loop loop, Handle h):
- cdef UVIdle handle
- handle = UVIdle.__new__(UVIdle)
- handle._init(loop, h)
- return handle
- cdef void cb_idle_callback(
- uv.uv_idle_t* handle,
- ) noexcept with gil:
- if __ensure_handle_data(<uv.uv_handle_t*>handle, "UVIdle callback") == 0:
- return
- cdef:
- UVIdle idle = <UVIdle> handle.data
- Handle h = idle.h
- try:
- h._run()
- except BaseException as ex:
- idle._error(ex, False)
|