|
From: <sv...@va...> - 2005-06-26 15:11:42
|
Author: njn
Date: 2005-06-26 16:11:37 +0100 (Sun, 26 Jun 2005)
New Revision: 4032
Log:
Simplify atfork to only provide the functionality we need.
Modified:
trunk/coregrind/m_libcproc.c
trunk/coregrind/m_scheduler/scheduler.c
trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
trunk/coregrind/m_syswrap/syswrap-generic.c
trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c
trunk/coregrind/m_syswrap/syswrap-x86-linux.c
trunk/coregrind/pub_core_libcproc.h
Modified: trunk/coregrind/m_libcproc.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_libcproc.c 2005-06-26 14:48:23 UTC (rev 4031)
+++ trunk/coregrind/m_libcproc.c 2005-06-26 15:11:37 UTC (rev 4032)
@@ -422,67 +422,26 @@
}
=20
/* ---------------------------------------------------------------------
- A simple atfork() facility for Valgrind's internal use
+ A trivial atfork() facility for Valgrind's internal use
------------------------------------------------------------------ */
=20
-struct atfork {
- vg_atfork_t pre;
- vg_atfork_t parent;
- vg_atfork_t child;
-};
+// Trivial because it only supports a single post-fork child action, whi=
ch
+// is all we need.
=20
-#define VG_MAX_ATFORK 10
+static vg_atfork_t atfork_child =3D NULL;
=20
-static struct atfork atforks[VG_MAX_ATFORK];
-static Int n_atfork;
-
-void VG_(atfork)(vg_atfork_t pre, vg_atfork_t parent, vg_atfork_t child)
+void VG_(atfork_child)(vg_atfork_t child)
{
- Int i;
+ if (NULL !=3D atfork_child)
+ VG_(core_panic)("More than one atfork_child handler requested");
=20
- for(i =3D 0; i < n_atfork; i++) {
- if (atforks[i].pre =3D=3D pre &&
- atforks[i].parent =3D=3D parent &&
- atforks[i].child =3D=3D child)
- return;
- }
-
- if (n_atfork >=3D VG_MAX_ATFORK)
- VG_(core_panic)("Too many VG_(atfork) handlers requested: "
- "raise VG_MAX_ATFORK");
-
- atforks[n_atfork].pre =3D pre;
- atforks[n_atfork].parent =3D parent;
- atforks[n_atfork].child =3D child;
-
- n_atfork++;
+ atfork_child =3D child;
}
=20
-void VG_(do_atfork_pre)(ThreadId tid)
-{
- Int i;
-
- for(i =3D 0; i < n_atfork; i++)
- if (atforks[i].pre !=3D NULL)
- (*atforks[i].pre)(tid);
-}
-
-void VG_(do_atfork_parent)(ThreadId tid)
-{
- Int i;
-
- for(i =3D 0; i < n_atfork; i++)
- if (atforks[i].parent !=3D NULL)
- (*atforks[i].parent)(tid);
-}
-
void VG_(do_atfork_child)(ThreadId tid)
{
- Int i;
-
- for(i =3D 0; i < n_atfork; i++)
- if (atforks[i].child !=3D NULL)
- (*atforks[i].child)(tid);
+ if (NULL !=3D atfork_child)
+ (*atfork_child)(tid);
}
=20
/*--------------------------------------------------------------------*/
Modified: trunk/coregrind/m_scheduler/scheduler.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_scheduler/scheduler.c 2005-06-26 14:48:23 UTC (rev =
4031)
+++ trunk/coregrind/m_scheduler/scheduler.c 2005-06-26 15:11:37 UTC (rev =
4032)
@@ -541,7 +541,7 @@
=3D VG_(clstk_end) - sizeof(=
UWord);
VG_(threads)[tid_main].client_stack_szB =3D VG_(client_rlimit_stack)=
.rlim_cur;
=20
- VG_(atfork)(NULL, NULL, sched_fork_cleanup);
+ VG_(atfork_child)(sched_fork_cleanup);
}
=20
=20
Modified: trunk/coregrind/m_syswrap/syswrap-amd64-linux.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-amd64-linux.c 2005-06-26 14:48:23 U=
TC (rev 4031)
+++ trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2005-06-26 15:11:37 U=
TC (rev 4032)
@@ -495,8 +495,6 @@
VG_(sigfillset)(&mask);
VG_(sigprocmask)(VKI_SIG_SETMASK, &mask, &fork_saved_mask);
=20
- VG_(do_atfork_pre)(tid);
-
/* Since this is the fork() form of clone, we don't need all that
VG_(clone) stuff */
res =3D VG_(do_syscall5)( __NR_clone, flags,=20
@@ -517,8 +515,6 @@
VG_(printf)(" clone(fork): process %d created child %d\n",=20
VG_(getpid)(), res.val);
=20
- VG_(do_atfork_parent)(tid);
-
/* restore signal mask */
VG_(sigprocmask)(VKI_SIG_SETMASK, &fork_saved_mask, NULL);
}
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-06-26 14:48:23 UTC (=
rev 4031)
+++ trunk/coregrind/m_syswrap/syswrap-generic.c 2005-06-26 15:11:37 UTC (=
rev 4032)
@@ -2730,8 +2730,6 @@
VG_(sigfillset)(&mask);
VG_(sigprocmask)(VKI_SIG_SETMASK, &mask, &fork_saved_mask);
=20
- VG_(do_atfork_pre)(tid);
-
SET_STATUS_from_SysRes( VG_(do_syscall0)(__NR_fork) );
=20
if (SUCCESS && RES =3D=3D 0) {
@@ -2744,8 +2742,6 @@
if (SUCCESS && RES > 0) {
PRINT(" fork: process %d created child %d\n", VG_(getpid)(), RES=
);
=20
- VG_(do_atfork_parent)(tid);
-
/* restore signal mask */
VG_(sigprocmask)(VKI_SIG_SETMASK, &fork_saved_mask, NULL);
}
Modified: trunk/coregrind/m_syswrap/syswrap-ppc32-linux.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-ppc32-linux.c 2005-06-26 14:48:23 U=
TC (rev 4031)
+++ trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c 2005-06-26 15:11:37 U=
TC (rev 4032)
@@ -545,8 +545,6 @@
//.. VG_(sigfillset)(&mask);
//.. VG_(sigprocmask)(VKI_SIG_SETMASK, &mask, &fork_saved_mask);
//..=20
-//.. VG_(do_atfork_pre)(tid);
-//..=20
//.. /* Since this is the fork() form of clone, we don't need all tha=
t
//.. VG_(clone) stuff */
//.. ret =3D VG_(do_syscall5)(__NR_clone, flags, (UWord)NULL, (UWord)=
parent_tidptr,=20
@@ -563,8 +561,6 @@
//.. if (VG_(clo_trace_syscalls))
//.. VG_(printf)(" clone(fork): process %d created child %d\n", VG_=
(getpid)(), ret);
//..=20
-//.. VG_(do_atfork_parent)(tid);
-//..=20
//.. /* restore signal mask */
//.. VG_(sigprocmask)(VKI_SIG_SETMASK, &fork_saved_mask, NULL);
//.. }
Modified: trunk/coregrind/m_syswrap/syswrap-x86-linux.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-x86-linux.c 2005-06-26 14:48:23 UTC=
(rev 4031)
+++ trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2005-06-26 15:11:37 UTC=
(rev 4032)
@@ -512,8 +512,6 @@
VG_(sigfillset)(&mask);
VG_(sigprocmask)(VKI_SIG_SETMASK, &mask, &fork_saved_mask);
=20
- VG_(do_atfork_pre)(tid);
-
/* Since this is the fork() form of clone, we don't need all that
VG_(clone) stuff */
res =3D VG_(do_syscall5)( __NR_clone, flags,=20
@@ -534,8 +532,6 @@
VG_(printf)(" clone(fork): process %d created child %d\n",=20
VG_(getpid)(), res.val);
=20
- VG_(do_atfork_parent)(tid);
-
/* restore signal mask */
VG_(sigprocmask)(VKI_SIG_SETMASK, &fork_saved_mask, NULL);
}
Modified: trunk/coregrind/pub_core_libcproc.h
=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/pub_core_libcproc.h 2005-06-26 14:48:23 UTC (rev 4031=
)
+++ trunk/coregrind/pub_core_libcproc.h 2005-06-26 15:11:37 UTC (rev 4032=
)
@@ -77,10 +77,8 @@
=20
// atfork
typedef void (*vg_atfork_t)(ThreadId);
-extern void VG_(atfork)(vg_atfork_t pre, vg_atfork_t parent, vg_atfork_t=
child);
-extern void VG_(do_atfork_pre) ( ThreadId tid );
-extern void VG_(do_atfork_parent) ( ThreadId tid );
-extern void VG_(do_atfork_child) ( ThreadId tid );
+extern void VG_(atfork_child) ( vg_atfork_t child_action );
+extern void VG_(do_atfork_child) ( ThreadId tid );
=20
#endif // __PUB_CORE_LIBCPROC_H
=20
|