def _udp_alloc_callback_(handle, suggested_size, buf): ec = core.get_ec() self = uv_callback.peek(ec.uv__udp_recv, handle) if self.read_buffer_size > 0: array = alloc_uint8array(self.read_buffer_size) else: array = alloc_uint8array(rffi.r_long(suggested_size)) self.alloc_buffers.append(array) buf.c_base = rffi.cast(rffi.CCHARP, array.uint8data) buf.c_len = rffi.r_size_t(array.length)
def _listen_callback_(handle, status): status = int(status) ec = core.get_ec() if status < 0: self = uv_callback.drop(ec.uv__connection, handle) self.listen_status = status else: self = uv_callback.peek(ec.uv__connection, handle) self.listen_count += 1 if self.accept_greenlet is not None: greenlet, self.accept_greenlet = self.accept_greenlet, None core.root_switch(ec, [greenlet])
def _fs_event_cb_(handle, filename, events, status): ec = core.get_ec() try: self = uv_callback.peek(ec.uv__fs_event, handle) status = rffi.r_long(status) if self.status == 0 and status < 0: uv_callback.drop(ec.uv__fs_event, handle) self.status = status return obj = Exnihilo() obj.setattr(u"path", from_cstring(rffi.charp2str(filename))) if rffi.r_long(events) == 1: obj.setattr(u"type", String(u"rename")) else: obj.setattr(u"type", String(u"change")) if self.greenlet is None: self.data.append(obj) else: greenlet, self.greenlet = self.greenlet, None core.switch([greenlet, obj]) except Unwinder as unwinder: core.root_unwind(ec, unwinder)