Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
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')
Пример #4
0
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')
Пример #5
0
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')
Пример #6
0
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')