[pypy-commit] pypy release-1.6.x: Another keepalive_until_here(); this one is probably needed too
arigo
noreply at buildbot.pypy.org
Sat Aug 13 19:06:16 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch: release-1.6.x
Changeset: r46480:c7329816d569
Date: 2011-08-13 18:03 +0200
http://bitbucket.org/pypy/pypy/changeset/c7329816d569/
Log: Another keepalive_until_here(); this one is probably needed too in
theory, but I don't have a particular test case in mind.
diff --git a/pypy/rpython/lltypesystem/rffi.py b/pypy/rpython/lltypesystem/rffi.py
--- a/pypy/rpython/lltypesystem/rffi.py
+++ b/pypy/rpython/lltypesystem/rffi.py
@@ -749,21 +749,18 @@
return hlstrtype(gc_buf)
new_buf = lltype.malloc(STRTYPE, needed_size)
- try:
- str_chars_offset = (offsetof(STRTYPE, 'chars') + \
- itemoffsetof(STRTYPE.chars, 0))
- if gc_buf:
- src = cast_ptr_to_adr(gc_buf) + str_chars_offset
- else:
- src = cast_ptr_to_adr(raw_buf) + itemoffsetof(TYPEP.TO, 0)
- dest = cast_ptr_to_adr(new_buf) + str_chars_offset
- ## FIXME: This is bad, because dest could potentially move
- ## if there are threads involved.
- raw_memcopy(src, dest,
- llmemory.sizeof(ll_char_type) * needed_size)
- return hlstrtype(new_buf)
- finally:
- keepalive_until_here(new_buf)
+ str_chars_offset = (offsetof(STRTYPE, 'chars') + \
+ itemoffsetof(STRTYPE.chars, 0))
+ if gc_buf:
+ src = cast_ptr_to_adr(gc_buf) + str_chars_offset
+ else:
+ src = cast_ptr_to_adr(raw_buf) + itemoffsetof(TYPEP.TO, 0)
+ dest = cast_ptr_to_adr(new_buf) + str_chars_offset
+ raw_memcopy(src, dest,
+ llmemory.sizeof(ll_char_type) * needed_size)
+ keepalive_until_here(gc_buf)
+ keepalive_until_here(new_buf)
+ return hlstrtype(new_buf)
# (char*, str) -> None
def keep_buffer_alive_until_here(raw_buf, gc_buf):
@@ -1068,4 +1065,4 @@
[VOIDP, VOIDP, SIZE_T],
lltype.Void,
threadsafe=False
-)
\ No newline at end of file
+)
More information about the pypy-commit
mailing list