Resync after {wq,p}thread_hijack rather than merely doing a check.

Believed to help with, although not fix, the underlying problem in
#192634.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10751
This commit is contained in:
Julian Seward 2009-08-07 20:28:58 +00:00
parent aa85156872
commit 2c168a6128
3 changed files with 8 additions and 6 deletions

View File

@ -50,6 +50,8 @@ extern const UInt ML_(mdep_trap_table_size);
void VG_(show_open_ports)(void);
void ML_(sync_mappings)(const HChar *when, const HChar *where, Int num);
// Unix syscalls.
// GEN = it uses the generic wrapper
// NYI = wrapper not yet implemented in Valgrind

View File

@ -593,7 +593,7 @@ void VG_(show_open_ports)(void)
sync_mappings
------------------------------------------------------------------ */
static void sync_mappings(const HChar *when, const HChar *where, Int num)
void ML_(sync_mappings)(const HChar *when, const HChar *where, Int num)
{
// Usually the number of segments added/removed in a single calls is very
// small e.g. 1. But it sometimes gets up to at least 100 or so (eg. for
@ -6263,7 +6263,7 @@ POST(mach_msg_receive)
// PRINT("UNHANDLED reply %d", mh->msgh_id);
// Assume the call may have mapped or unmapped memory
sync_mappings("after", "mach_msg_receive", 0);
ML_(sync_mappings)("after", "mach_msg_receive", 0);
}
PRE(mach_msg_receive)
@ -6674,7 +6674,7 @@ POST(mach_msg)
POST(mach_msg_unhandled)
{
sync_mappings("after", "mach_msg_unhandled", 0);
ML_(sync_mappings)("after", "mach_msg_unhandled", 0);
}
@ -6973,7 +6973,7 @@ PRE(iokit_user_client_trap)
POST(iokit_user_client_trap)
{
sync_mappings("after", "iokit_user_client_trap", ARG2);
ML_(sync_mappings)("after", "iokit_user_client_trap", ARG2);
}

View File

@ -332,7 +332,7 @@ void pthread_hijack(Addr self, Addr kport, Addr func, Addr func_arg,
// client allocated stack
find_stack_segment(tst->tid, sp);
}
VG_(am_do_sync_check)("after", "pthread_hijack", 0);
ML_(sync_mappings)("after", "pthread_hijack", 0);
// DDD: should this be here rather than in POST(sys_bsdthread_create)?
// But we don't have ptid here...
@ -478,7 +478,7 @@ void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem,
stack-VKI_PAGE_SIZE, VKI_PAGE_SIZE,
0, VKI_MAP_PRIVATE, -1, 0);
VG_(am_do_sync_check)("after", "wqthread_hijack", 0);
ML_(sync_mappings)("after", "wqthread_hijack", 0);
// Go!
/* Same comments as the 'release' in the then-clause.