[pypy-svn] r75889 - pypy/trunk/pypy/module/_locale
getxsick at codespeak.net
getxsick at codespeak.net
Tue Jul 6 11:41:08 CEST 2010
Author: getxsick
Date: Tue Jul 6 11:41:07 2010
New Revision: 75889
Modified:
pypy/trunk/pypy/module/_locale/interp_locale.py
Log:
fix memory leaks
Modified: pypy/trunk/pypy/module/_locale/interp_locale.py
==============================================================================
--- pypy/trunk/pypy/module/_locale/interp_locale.py (original)
+++ pypy/trunk/pypy/module/_locale/interp_locale.py Tue Jul 6 11:41:07 2010
@@ -132,7 +132,13 @@
space.is_true(space.isinstance(w_s2, space.w_str)):
s1, s2 = space.str_w(w_s1), space.str_w(w_s2)
- return space.wrap(_strcoll(rffi.str2charp(s1), rffi.str2charp(s2)))
+ s1_c = rffi.str2charp(s1)
+ s2_c = rffi.str2charp(s2)
+ try:
+ return space.wrap(_strcoll(s1_c, s2_c))
+ finally:
+ rffi.free_charp(s1_c)
+ rffi.free_charp(s2_c)
#if not space.is_true(space.isinstance(w_s1, space.w_unicode)) and \
# not space.is_true(space.isinstance(w_s2, space.w_unicode)):
@@ -143,7 +149,12 @@
s1_c = rffi.unicode2wcharp(s1)
s2_c = rffi.unicode2wcharp(s2)
- result = _wcscoll(s1_c, s2_c)
+ try:
+ result = _wcscoll(s1_c, s2_c)
+ finally:
+ rffi.free_wcharp(s1_c)
+ rffi.free_wcharp(s2_c)
+
return space.wrap(result)
strcoll.unwrap_spec = [ObjSpace, W_Root, W_Root]
@@ -156,13 +167,21 @@
n1 = len(s) + 1
buf = lltype.malloc(rffi.CCHARP.TO, n1, flavor="raw", zero=True)
- n2 = _strxfrm(buf, rffi.str2charp(s), n1) + 1
+ s_c = rffi.str2charp(s)
+ try:
+ n2 = _strxfrm(buf, s_c, n1) + 1
+ finally:
+ rffi.free_charp(s_c)
if n2 > n1:
# more space needed
lltype.free(buf, flavor="raw")
buf = lltype.malloc(rffi.CCHARP.TO, intmask(n2),
flavor="raw", zero=True)
- _strxfrm(buf, rffi.str2charp(s), n2)
+ s_c = rffi.str2charp(s)
+ try:
+ _strxfrm(buf, s_c, n2)
+ finally:
+ rffi.free_charp(s_c)
val = rffi.charp2str(buf)
lltype.free(buf, flavor="raw")
@@ -194,7 +213,11 @@
def gettext(space, msg):
"""gettext(msg) -> string
Return translation of msg."""
- return space.wrap(rffi.charp2str(_gettext(rffi.str2charp(msg))))
+ msg_c = rffi.str2charp(msg)
+ try:
+ return space.wrap(rffi.charp2str(_gettext(msg_c)))
+ finally:
+ rffi.free_charp(msg_c)
gettext.unwrap_spec = [ObjSpace, str]
@@ -205,10 +228,20 @@
Return translation of msg in domain."""
if space.is_w(w_domain, space.w_None):
domain = None
- result = _dgettext(domain, rffi.str2charp(msg))
+ msg_c = rffi.str2charp(msg)
+ try:
+ result = _dgettext(domain, msg_c)
+ finally:
+ rffi.free_charp(msg_c)
else:
domain = space.str_w(w_domain)
- result = _dgettext(rffi.str2charp(domain), rffi.str2charp(msg))
+ domain_c = rffi.str2charp(domain)
+ msg_c = rffi.str2charp(msg)
+ try:
+ result = _dgettext(domain_c, msg_c)
+ finally:
+ rffi.free_charp(domain_c)
+ rffi.free_charp(msg_c)
return space.wrap(rffi.charp2str(result))
@@ -223,12 +256,21 @@
if space.is_w(w_domain, space.w_None):
domain = None
- result = _dcgettext(domain, rffi.str2charp(msg),
- rffi.cast(rffi.INT, category))
+ msg_c = rffi.str2charp(msg)
+ try:
+ result = _dcgettext(domain, msg_c, rffi.cast(rffi.INT, category))
+ finally:
+ rffi.free_charp(msg_c)
else:
domain = space.str_w(w_domain)
- result = _dcgettext(rffi.str2charp(domain), rffi.str2charp(msg),
- rffi.cast(rffi.INT, category))
+ domain_c = rffi.str2charp(domain)
+ msg_c = rffi.str2charp(msg)
+ try:
+ result = _dcgettext(domain_c, msg_c,
+ rffi.cast(rffi.INT, category))
+ finally:
+ rffi.free_charp(domain_c)
+ rffi.free_charp(msg_c)
return space.wrap(rffi.charp2str(result))
@@ -246,7 +288,11 @@
result = _textdomain(domain)
else:
domain = space.str_w(w_domain)
- result = _textdomain(rffi.str2charp(domain))
+ domain_c = rffi.str2charp(domain)
+ try:
+ result = _textdomain(domain_c)
+ finally:
+ rffi.free_charp(domain_c)
return space.wrap(rffi.charp2str(result))
@@ -261,11 +307,20 @@
if space.is_w(w_dir, space.w_None):
dir = None
- dirname = _bindtextdomain(rffi.str2charp(domain), dir)
+ domain_c = rffi.str2charp(domain)
+ try:
+ dirname = _bindtextdomain(domain_c, dir)
+ finally:
+ rffi.free_charp(domain_c)
else:
dir = space.str_w(w_dir)
- dirname = _bindtextdomain(rffi.str2charp(domain),
- rffi.str2charp(dir))
+ domain_c = rffi.str2charp(domain)
+ dir_c = rffi.str2charp(dir)
+ try:
+ dirname = _bindtextdomain(domain_c, dir_c)
+ finally:
+ rffi.free_charp(domain_c)
+ rffi.free_charp(dir_c)
if not dirname:
errno = rposix.get_errno()
@@ -284,12 +339,20 @@
if space.is_w(w_codeset, space.w_None):
codeset = None
- result = _bind_textdomain_codeset(
- rffi.str2charp(domain), codeset)
+ domain_c = rffi.str2charp(domain)
+ try:
+ result = _bind_textdomain_codeset(domain_c, codeset)
+ finally:
+ rffi.free_charp(domain_c)
else:
codeset = space.str_w(w_codeset)
- result = _bind_textdomain_codeset(rffi.str2charp(domain),
- rffi.str2charp(codeset))
+ domain_c = rffi.str2charp(domain)
+ codeset_c = rffi.str2charp(codeset)
+ try:
+ result = _bind_textdomain_codeset(domain_c, codeset_c)
+ finally:
+ rffi.free_charp(domain_c)
+ rffi.free_charp(codeset_c)
if not result:
return space.w_None
More information about the Pypy-commit
mailing list