Merge r6157:
- add extra fields to ThreadOSState to make thread cancellation sort-of
work on AIX5
- add function VG_(count_runnable_threads)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6288 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/pub_core_threadstate.h b/coregrind/pub_core_threadstate.h
index aa2a9ac..8b622bc 100644
--- a/coregrind/pub_core_threadstate.h
+++ b/coregrind/pub_core_threadstate.h
@@ -67,8 +67,8 @@
typedef
enum {
VgSrc_None, /* not exiting yet */
- VgSrc_ExitSyscall, /* client called exit(). This is the normal
- route out. */
+ VgSrc_ExitThread, /* just this thread is exiting */
+ VgSrc_ExitProcess, /* entire process is exiting */
VgSrc_FatalSig /* Killed by the default action of a fatal
signal */
}
@@ -121,8 +121,22 @@
Addr valgrind_stack_init_SP; // starting value for SP
/* exit details */
- Int exitcode; // in the case of exitgroup, set by someone else
- Int fatalsig; // fatal signal
+ Word exitcode; // in the case of exitgroup, set by someone else
+ Int fatalsig; // fatal signal
+
+# if defined(VGO_aix5)
+ /* AIX specific fields to make thread cancellation sort-of work */
+ /* What is this thread's current cancellation state a la
+ POSIX (deferred vs async, enable vs disabled) ? */
+ Bool cancel_async; // current cancel mode (async vs deferred)
+ Bool cancel_disabled; // cancellation disabled?
+ /* What's happened so far? */
+ enum { Canc_NoRequest=0, // no cancellation requested
+ Canc_Requested=1, // requested but not actioned
+ Canc_Actioned=2 } // requested and actioned
+ cancel_progress;
+ /* Initial state is False, False, Canc_Normal. */
+# endif
}
ThreadOSstate;
@@ -238,6 +252,9 @@
/* Return the number of non-dead Threads */
extern Int VG_(count_living_threads)(void);
+/* Return the number of threads in VgTs_Runnable state */
+extern Int VG_(count_runnable_threads)(void);
+
/* Given an LWP id (ie, real kernel thread id), find the corresponding
ThreadId */
extern ThreadId VG_(get_lwp_tid)(Int lwpid);