Added some kernel tracing for sigsuspend().

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35834 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2010-03-13 12:31:01 +00:00
parent fe58216997
commit f427f6af3f
1 changed files with 45 additions and 0 deletions

View File

@ -204,6 +204,47 @@ class SigProcMask : public AbstractTraceEntry {
sigset_t fOldMask;
};
class SigSuspend : public AbstractTraceEntry {
public:
SigSuspend(sigset_t mask)
:
fMask(mask),
fOldMask(thread_get_current_thread()->sig_block_mask)
{
Initialized();
}
virtual void AddDump(TraceOutput& out)
{
out.Print("signal suspend: %#" B_PRIx32 ", old mask: %#" B_PRIx32,
fMask, fOldMask);
}
private:
sigset_t fMask;
sigset_t fOldMask;
};
class SigSuspendDone : public AbstractTraceEntry {
public:
SigSuspendDone()
:
fSignals(thread_get_current_thread()->sig_pending)
{
Initialized();
}
virtual void AddDump(TraceOutput& out)
{
out.Print("signal suspend done: %#" B_PRIx32, fSignals);
}
private:
uint32 fSignals;
};
} // namespace SignalTracing
# define T(x) new(std::nothrow) SignalTracing::x
@ -845,6 +886,8 @@ sigwait(const sigset_t *set, int *_signal)
int
sigsuspend(const sigset_t *mask)
{
T(SigSuspend(*mask));
struct thread *thread = thread_get_current_thread();
sigset_t oldMask = atomic_get(&thread->sig_block_mask);
@ -863,6 +906,8 @@ sigsuspend(const sigset_t *mask)
update_current_thread_signals_flag();
T(SigSuspendDone());
// we're not supposed to actually succeed
return B_INTERRUPTED;
}