|
From: <sv...@va...> - 2005-09-28 20:05:37
|
Author: sewardj
Date: 2005-09-28 21:05:31 +0100 (Wed, 28 Sep 2005)
New Revision: 4814
Log:
Fix subtle bug in ML_(generic_POST_sys_shmdt) caused by new aspacem.
Modified:
trunk/coregrind/m_syswrap/syswrap-generic.c
Modified: trunk/coregrind/m_syswrap/syswrap-generic.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syswrap/syswrap-generic.c 2005-09-28 20:00:30 UTC (=
rev 4813)
+++ trunk/coregrind/m_syswrap/syswrap-generic.c 2005-09-28 20:05:31 UTC (=
rev 4814)
@@ -1627,14 +1627,15 @@
{
NSegment* s =3D VG_(am_find_nsegment)(arg0);
=20
- if (s !=3D NULL /* && (s->flags & SF_SHM) */
- /* && Implied by defn of am_find_nsegment:
- VG_(seg_contains)(s, arg0, 1) */) {
- Bool d =3D VG_(am_notify_munmap)(s->start, s->end+1 - s->start);
- VG_TRACK( die_mem_munmap, s->start, s->end+1 - s->start );
+ if (s !=3D NULL) {
+ Addr s_start =3D s->start;
+ SizeT s_len =3D s->end+1 - s->start;
+ Bool d =3D VG_(am_notify_munmap)(s_start, s_len);
+ s =3D NULL; /* s is now invalid */
+ VG_TRACK( die_mem_munmap, s_start, s_len );
if (d)
- VG_(discard_translations)( (Addr64)(s->start),
- (ULong)(s->end+1 - s->start),
+ VG_(discard_translations)( (Addr64)s_start,
+ (ULong)s_len,
"ML_(generic_POST_sys_shmdt)" );
}
}
|