def write_message(self, std, text): if core.get_ec() != self.ec: # Just discard those damn messages if return # they come up in wrong thread. array = space.to_uint8array(text) bufs, nbufs = uv_callback.obj2bufs(array) if isinstance(std, fs.WriteStream) and not std.fileobj.closed: fd = std.fileobj.fd req = lltype.malloc(uv.fs_ptr.TO, flavor='raw', zero=True) _ = uv.fs_write(self.ec.uv_loop, req, fd, bufs, nbufs, std.offset, lltype.nullptr(uv.fs_cb.TO)) if rffi.r_long(req.c_result) > 0: std.offset += rffi.r_long(req.c_result) lltype.free(bufs, flavor="raw") lltype.free(req, flavor="raw") elif isinstance(std, uv_stream.Stream) and not std.closed: stream = std.stream req = lltype.malloc(uv.write_ptr.TO, flavor='raw', zero=True) req.c_data = rffi.cast(rffi.VOIDP, bufs) res = uv.write(req, stream, bufs, nbufs, _logging_write_callback_) if rffi.r_long(res) < 0: lltype.free(bufs, flavor="raw") lltype.free(req, flavor="raw") else: return
def write_message(self, std, text): if core.g.ec.get() is not self.ec: self.log_dump.append(text) return if std is self.stderr: text = "\n".join(self.log_dump + [text]) self.log_dump = [] array = space.to_uint8array(text) bufs, nbufs = uv_callback.obj2bufs(array) if isinstance(std, fs.WriteStream) and not std.fileobj.closed: fd = std.fileobj.fd req = lltype.malloc(uv.fs_ptr.TO, flavor='raw', zero=True) _ = uv.fs_write(self.ec.uv_loop, req, fd, bufs, nbufs, std.offset, lltype.nullptr(uv.fs_cb.TO)) if rffi.r_long(req.c_result) > 0: std.offset += rffi.r_long(req.c_result) lltype.free(bufs, flavor="raw") lltype.free(req, flavor="raw") elif isinstance(std, uv_stream.Stream) and not std.closed: stream = std.stream req = lltype.malloc(uv.write_ptr.TO, flavor='raw', zero=True) req.c_data = rffi.cast(rffi.VOIDP, bufs) res = uv.write(req, stream, bufs, nbufs, _logging_write_callback_) if rffi.r_long(res) < 0: lltype.free(bufs, flavor="raw") lltype.free(req, flavor="raw") else: return
def Stream_try_write(self, data): self.check_closed() bufs, nbufs = uv_callback.obj2bufs(data) try: status = uv.try_write(self.stream, bufs, nbufs) check(status) return Integer(rffi.r_long(status)) finally: lltype.free(bufs, flavor='raw')
def UDP_try_send(self, data, addr): self.check_closed() bufs, nbufs = uv_callback.obj2bufs(data) req = lltype.malloc(uv.udp_send_ptr.TO, flavor='raw', zero=True) sockaddr = as_sockaddr(addr) try: check( uv.udp_try_send(req, self.udp, bufs, nbufs, sockaddr, uv_callback.udp_send.cb)) return null finally: lltype.free(bufs, flavor='raw') lltype.free(req, flavor='raw')
def Stream_write(self, data): self.check_closed() bufs, nbufs = uv_callback.obj2bufs(data) req = lltype.malloc(uv.write_ptr.TO, flavor='raw', zero=True) try: response = uv_callback.write(req) check( response.wait( uv.write(req, self.stream, bufs, nbufs, uv_callback.write.cb))[0]) return null finally: lltype.free(bufs, flavor='raw') lltype.free(req, flavor='raw')
def File_pwrite(self, data, offset): bufs, nbufs = uv_callback.obj2bufs(data) req = lltype.malloc(uv.fs_ptr.TO, flavor='raw', zero=True) try: response = uv_callback.fs(req) response.wait( uv.fs_write(response.ec.uv_loop, req, self.fd, bufs, nbufs, offset.value, uv_callback.fs.cb)) if req.c_result < 0: raise uv_callback.to_error(req.c_result) return Integer(rffi.r_long(req.c_result)) finally: uv.fs_req_cleanup(req) lltype.free(bufs, flavor='raw') lltype.free(req, flavor='raw')