Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r72359:8bc897775808 Date: 2014-07-04 16:44 +0200 http://bitbucket.org/pypy/pypy/changeset/8bc897775808/
Log: Replace more usages of rffi.alloc_buffer() with scoped_alloc_buffer(). diff --git a/pypy/module/cpyext/test/test_unicodeobject.py b/pypy/module/cpyext/test/test_unicodeobject.py --- a/pypy/module/cpyext/test/test_unicodeobject.py +++ b/pypy/module/cpyext/test/test_unicodeobject.py @@ -442,8 +442,8 @@ def test_copy(self, space, api): w_x = space.wrap(u"abcd\u0660") - target_chunk, _ = rffi.alloc_unicodebuffer(space.int_w(space.len(w_x))) - #lltype.malloc(Py_UNICODE, space.int_w(space.len(w_x)), flavor='raw') + count1 = space.int_w(space.len(w_x)) + target_chunk = lltype.malloc(rffi.CWCHARP.TO, count1, flavor='raw') x_chunk = api.PyUnicode_AS_UNICODE(w_x) api.Py_UNICODE_COPY(target_chunk, x_chunk, 4) diff --git a/rpython/rlib/rfile.py b/rpython/rlib/rfile.py --- a/rpython/rlib/rfile.py +++ b/rpython/rlib/rfile.py @@ -188,16 +188,13 @@ finally: lltype.free(buf, flavor='raw') else: - raw_buf, gc_buf = rffi.alloc_buffer(size) - try: - returned_size = c_fread(raw_buf, 1, size, ll_file) + with rffi.scoped_alloc_buffer(size) as buf: + returned_size = c_fread(buf.raw, 1, size, ll_file) returned_size = intmask(returned_size) # is between 0 and size if returned_size == 0: if not c_feof(ll_file): raise _error(ll_file) - s = rffi.str_from_buffer(raw_buf, gc_buf, size, returned_size) - finally: - rffi.keep_buffer_alive_until_here(raw_buf, gc_buf) + s = buf.str(returned_size) return s def seek(self, pos, whence=0): @@ -270,25 +267,21 @@ def readline(self): if self.ll_file: - raw_buf, gc_buf = rffi.alloc_buffer(BASE_LINE_SIZE) - try: - c = self._readline1(raw_buf) + with rffi.scoped_alloc_buffer(BASE_LINE_SIZE) as buf: + c = self._readline1(buf.raw) if c >= 0: - return rffi.str_from_buffer(raw_buf, gc_buf, - BASE_LINE_SIZE, c) + return buf.str(c) # # this is the rare case: the line is longer than BASE_LINE_SIZE s = StringBuilder() while True: - s.append_charpsize(raw_buf, BASE_LINE_SIZE - 1) - c = self._readline1(raw_buf) + s.append_charpsize(buf.raw, BASE_LINE_SIZE - 1) + c = self._readline1(buf.raw) if c >= 0: break # - s.append_charpsize(raw_buf, c) + s.append_charpsize(buf.raw, c) return s.build() - finally: - rffi.keep_buffer_alive_until_here(raw_buf, gc_buf) raise ValueError("I/O operation on closed file") diff --git a/rpython/rlib/rsocket.py b/rpython/rlib/rsocket.py --- a/rpython/rlib/rsocket.py +++ b/rpython/rlib/rsocket.py @@ -827,15 +827,12 @@ if timeout == 1: raise SocketTimeout elif timeout == 0: - raw_buf, gc_buf = rffi.alloc_buffer(buffersize) - try: + with rffi.scoped_alloc_buffer(buffersize) as buf: read_bytes = _c.socketrecv(self.fd, - rffi.cast(rffi.VOIDP, raw_buf), + rffi.cast(rffi.VOIDP, buf.raw), buffersize, flags) if read_bytes >= 0: - return rffi.str_from_buffer(raw_buf, gc_buf, buffersize, read_bytes) - finally: - rffi.keep_buffer_alive_until_here(raw_buf, gc_buf) + return buf.str(read_bytes) raise self.error_handler() def recvinto(self, rwbuffer, nbytes, flags=0): @@ -852,11 +849,10 @@ if timeout == 1: raise SocketTimeout elif timeout == 0: - raw_buf, gc_buf = rffi.alloc_buffer(buffersize) - try: + with rffi.scoped_alloc_buffer(buffersize) as buf: address, addr_p, addrlen_p = self._addrbuf() try: - read_bytes = _c.recvfrom(self.fd, raw_buf, buffersize, flags, + read_bytes = _c.recvfrom(self.fd, buf.raw, buffersize, flags, addr_p, addrlen_p) addrlen = rffi.cast(lltype.Signed, addrlen_p[0]) finally: @@ -867,10 +863,8 @@ address.addrlen = addrlen else: address = None - data = rffi.str_from_buffer(raw_buf, gc_buf, buffersize, read_bytes) + data = buf.str(read_bytes) return (data, address) - finally: - rffi.keep_buffer_alive_until_here(raw_buf, gc_buf) raise self.error_handler() def recvfrom_into(self, rwbuffer, nbytes, flags=0): diff --git a/rpython/rtyper/module/ll_os.py b/rpython/rtyper/module/ll_os.py --- a/rpython/rtyper/module/ll_os.py +++ b/rpython/rtyper/module/ll_os.py @@ -1006,15 +1006,12 @@ if count < 0: raise OSError(errno.EINVAL, None) rposix.validate_fd(fd) - raw_buf, gc_buf = rffi.alloc_buffer(count) - try: - void_buf = rffi.cast(rffi.VOIDP, raw_buf) + with rffi.scoped_alloc_buffer(count) as buf: + void_buf = rffi.cast(rffi.VOIDP, buf.raw) got = rffi.cast(lltype.Signed, os_read(fd, void_buf, count)) if got < 0: raise OSError(rposix.get_errno(), "os_read failed") - return rffi.str_from_buffer(raw_buf, gc_buf, count, got) - finally: - rffi.keep_buffer_alive_until_here(raw_buf, gc_buf) + return buf.str(got) return extdef([int, int], SomeString(can_be_None=True), "ll_os.ll_os_read", llimpl=os_read_llimpl) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit