Change 33641 by [EMAIL PROTECTED] on 2008/04/03 16:39:03
Integrate:
[ 32822]
Subject: Re: SV leak?
From: Vincent Pit <[EMAIL PROTECTED]>
Date: Thu, 03 Jan 2008 19:26:05 +0100
Message-ID: <[EMAIL PROTECTED]>
Mortalize SVs that are being pushed on the stack.
Try to use specialized macros for pushing mortals.
Affected files ...
... //depot/maint-5.10/perl/ext/B/B.xs#6 integrate
... //depot/maint-5.10/perl/ext/Win32/Win32.xs#3 integrate
... //depot/maint-5.10/perl/mg.c#6 integrate
... //depot/maint-5.10/perl/os2/os2.c#4 integrate
... //depot/maint-5.10/perl/pp_sys.c#4 integrate
... //depot/maint-5.10/perl/win32/wince.c#3 integrate
Differences ...
==== //depot/maint-5.10/perl/ext/B/B.xs#6 (text) ====
Index: perl/ext/B/B.xs
--- perl/ext/B/B.xs#5~33161~ 2008-01-31 14:14:13.000000000 -0800
+++ perl/ext/B/B.xs 2008-04-03 09:39:03.000000000 -0700
@@ -2013,7 +2013,7 @@
(void)hv_iterinit(hv);
EXTEND(sp, HvKEYS(hv) * 2);
while ((sv = hv_iternextsv(hv, &key, &len))) {
- PUSHs(newSVpvn(key, len));
+ mPUSHp(key, len);
PUSHs(make_sv_object(aTHX_ sv_newmortal(), sv));
}
}
==== //depot/maint-5.10/perl/ext/Win32/Win32.xs#3 (text) ====
Index: perl/ext/Win32/Win32.xs
--- perl/ext/Win32/Win32.xs#2~33590~ 2008-03-28 12:01:33.000000000 -0700
+++ perl/ext/Win32/Win32.xs 2008-04-03 09:39:03.000000000 -0700
@@ -1245,17 +1245,17 @@
if (GIMME_V == G_SCALAR) {
XSRETURN_IV(g_osver.dwPlatformId);
}
- XPUSHs(newSVpvn(g_osver.szCSDVersion, strlen(g_osver.szCSDVersion)));
+ mXPUSHp(g_osver.szCSDVersion, strlen(g_osver.szCSDVersion));
- XPUSHs(newSViv(g_osver.dwMajorVersion));
- XPUSHs(newSViv(g_osver.dwMinorVersion));
- XPUSHs(newSViv(g_osver.dwBuildNumber));
- XPUSHs(newSViv(g_osver.dwPlatformId));
+ mXPUSHi(g_osver.dwMajorVersion);
+ mXPUSHi(g_osver.dwMinorVersion);
+ mXPUSHi(g_osver.dwBuildNumber);
+ mXPUSHi(g_osver.dwPlatformId);
if (g_osver_ex) {
- XPUSHs(newSViv(g_osver.wServicePackMajor));
- XPUSHs(newSViv(g_osver.wServicePackMinor));
- XPUSHs(newSViv(g_osver.wSuiteMask));
- XPUSHs(newSViv(g_osver.wProductType));
+ mXPUSHi(g_osver.wServicePackMajor);
+ mXPUSHi(g_osver.wServicePackMinor);
+ mXPUSHi(g_osver.wSuiteMask);
+ mXPUSHi(g_osver.wProductType);
}
PUTBACK;
}
==== //depot/maint-5.10/perl/mg.c#6 (text) ====
Index: perl/mg.c
--- perl/mg.c#5~33139~ 2008-01-30 15:19:42.000000000 -0800
+++ perl/mg.c 2008-04-03 09:39:03.000000000 -0700
@@ -2902,7 +2902,7 @@
#endif
EXTEND(SP, 2);
PUSHs((SV*)rv);
- PUSHs(newSVpvn((char *)sip, sizeof(*sip)));
+ mPUSHp((char *)sip, sizeof(*sip));
}
}
==== //depot/maint-5.10/perl/os2/os2.c#4 (text) ====
Index: perl/os2/os2.c
--- perl/os2/os2.c#3~33121~ 2008-01-30 03:03:49.000000000 -0800
+++ perl/os2/os2.c 2008-04-03 09:39:03.000000000 -0700
@@ -4360,10 +4360,10 @@
&PipeState), "DosPeekNPipe() for state");
if (state) {
EXTEND(SP, 3);
- PUSHs(newSVuv(PipeState));
+ mPUSHu(PipeState);
/* Bytes (available/in-message) */
- PUSHs(newSViv(BytesAvail.cbpipe));
- PUSHs(newSViv(BytesAvail.cbmessage));
+ mPUSHi(BytesAvail.cbpipe);
+ mPUSHi(BytesAvail.cbmessage);
XSRETURN(3);
} else if (info) {
/* L S S C C C/Z*
@@ -4390,12 +4390,12 @@
else
size = strlen(b.pInfo.szName);
EXTEND(SP, 6);
- PUSHs(newSVpvn(b.pInfo.szName, size));
- PUSHs(newSVuv(b.id));
- PUSHs(newSViv(b.pInfo.cbOut));
- PUSHs(newSViv(b.pInfo.cbIn));
- PUSHs(newSViv(b.pInfo.cbMaxInst));
- PUSHs(newSViv(b.pInfo.cbCurInst));
+ mPUSHp(b.pInfo.szName, size);
+ mPUSHu(b.id);
+ mPUSHi(b.pInfo.cbOut);
+ mPUSHi(b.pInfo.cbIn);
+ mPUSHi(b.pInfo.cbMaxInst);
+ mPUSHi(b.pInfo.cbCurInst);
XSRETURN(6);
} else if (BytesAvail.cbpipe == 0) {
XSRETURN_NO;
==== //depot/maint-5.10/perl/pp_sys.c#4 (text) ====
Index: perl/pp_sys.c
--- perl/pp_sys.c#3~33139~ 2008-01-30 15:19:42.000000000 -0800
+++ perl/pp_sys.c 2008-04-03 09:39:03.000000000 -0700
@@ -4700,7 +4700,7 @@
}
#else
if (hent->h_addr)
- PUSHs(newSVpvn(hent->h_addr, len));
+ mPUSHp(hent->h_addr, len);
else
PUSHs(sv_mortalcopy(&PL_sv_no));
#endif /* h_addr */
==== //depot/maint-5.10/perl/win32/wince.c#3 (text) ====
Index: perl/win32/wince.c
--- perl/win32/wince.c#2~33121~ 2008-01-30 03:03:49.000000000 -0800
+++ perl/win32/wince.c 2008-04-03 09:39:03.000000000 -0700
@@ -2440,12 +2440,12 @@
if (!XCEGetVersionExA(&osver)) {
XSRETURN_EMPTY;
}
- XPUSHs(newSVpvn(osver.szCSDVersion, strlen(osver.szCSDVersion)));
- XPUSHs(newSViv(osver.dwMajorVersion));
- XPUSHs(newSViv(osver.dwMinorVersion));
- XPUSHs(newSViv(osver.dwBuildNumber));
+ mXPUSHp(osver.szCSDVersion, strlen(osver.szCSDVersion));
+ mXPUSHi(osver.dwMajorVersion);
+ mXPUSHi(osver.dwMinorVersion);
+ mXPUSHi(osver.dwBuildNumber);
/* WINCE = 3 */
- XPUSHs(newSViv(osver.dwPlatformId));
+ mXPUSHi(osver.dwPlatformId);
PUTBACK;
}
@@ -2554,15 +2554,15 @@
XSRETURN_EMPTY;
}
- XPUSHs(newSViv(sps.ACLineStatus));
- XPUSHs(newSViv(sps.BatteryFlag));
- XPUSHs(newSViv(sps.BatteryLifePercent));
- XPUSHs(newSViv(sps.BatteryLifeTime));
- XPUSHs(newSViv(sps.BatteryFullLifeTime));
- XPUSHs(newSViv(sps.BackupBatteryFlag));
- XPUSHs(newSViv(sps.BackupBatteryLifePercent));
- XPUSHs(newSViv(sps.BackupBatteryLifeTime));
- XPUSHs(newSViv(sps.BackupBatteryFullLifeTime));
+ mXPUSHi(sps.ACLineStatus);
+ mXPUSHi(sps.BatteryFlag);
+ mXPUSHi(sps.BatteryLifePercent);
+ mXPUSHi(sps.BatteryLifeTime);
+ mXPUSHi(sps.BatteryFullLifeTime);
+ mXPUSHi(sps.BackupBatteryFlag);
+ mXPUSHi(sps.BackupBatteryLifePercent);
+ mXPUSHi(sps.BackupBatteryLifeTime);
+ mXPUSHi(sps.BackupBatteryFullLifeTime);
PUTBACK;
}
End of Patch.