* sigproc.h [sigthread]: Add exception field.

[sigframe::~sigframe]: Clear exception field.
[sigframe::set]: Set exception field from caller.
* sigproc.cc (sig_send): Set exception field when frame pointer is passed in.
* exceptions.cc (interrupt_on_return): Always treat exception as interruptible.
This commit is contained in:
Christopher Faylor
2001-04-25 19:11:37 +00:00
parent 86699e1555
commit 968d91b2e6
4 changed files with 16 additions and 3 deletions

View File

@@ -40,6 +40,7 @@ struct sigthread
DWORD frame;
CRITICAL_SECTION lock;
LONG winapi_lock;
BOOL exception;
bool get_winapi_lock (int test = 0);
void release_winapi_lock ();
void init (const char *s);
@@ -55,6 +56,7 @@ private:
{
EnterCriticalSection (&st->lock);
st->frame = 0;
st->exception = 0;
st->release_winapi_lock ();
LeaveCriticalSection (&st->lock);
st = NULL;
@@ -62,11 +64,12 @@ private:
}
public:
void set (sigthread &t, DWORD ebp)
void set (sigthread &t, DWORD ebp, bool is_exception = 0)
{
DWORD oframe = t.frame;
st = &t;
t.frame = ebp;
t.exception = is_exception;
if (!oframe)
t.get_winapi_lock ();
}