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:
parent
fe58216997
commit
f427f6af3f
|
@ -204,6 +204,47 @@ class SigProcMask : public AbstractTraceEntry {
|
||||||
sigset_t fOldMask;
|
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
|
} // namespace SignalTracing
|
||||||
|
|
||||||
# define T(x) new(std::nothrow) SignalTracing::x
|
# define T(x) new(std::nothrow) SignalTracing::x
|
||||||
|
@ -845,6 +886,8 @@ sigwait(const sigset_t *set, int *_signal)
|
||||||
int
|
int
|
||||||
sigsuspend(const sigset_t *mask)
|
sigsuspend(const sigset_t *mask)
|
||||||
{
|
{
|
||||||
|
T(SigSuspend(*mask));
|
||||||
|
|
||||||
struct thread *thread = thread_get_current_thread();
|
struct thread *thread = thread_get_current_thread();
|
||||||
sigset_t oldMask = atomic_get(&thread->sig_block_mask);
|
sigset_t oldMask = atomic_get(&thread->sig_block_mask);
|
||||||
|
|
||||||
|
@ -863,6 +906,8 @@ sigsuspend(const sigset_t *mask)
|
||||||
|
|
||||||
update_current_thread_signals_flag();
|
update_current_thread_signals_flag();
|
||||||
|
|
||||||
|
T(SigSuspendDone());
|
||||||
|
|
||||||
// we're not supposed to actually succeed
|
// we're not supposed to actually succeed
|
||||||
return B_INTERRUPTED;
|
return B_INTERRUPTED;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue