* winsup.h: Eliminate inclusion of most of the cygwin .h files. Use .h files
only in sources which require them. * Makefile.in: Generate dependencies with -MD option.
This commit is contained in:
@ -35,3 +35,79 @@ set_reent (struct _reent *r)
|
||||
*base = PTMAGIC;
|
||||
base[-1] = (DWORD) r;
|
||||
}
|
||||
|
||||
#define PER_THREAD_FORK_CLEAR ((void *)0xffffffff)
|
||||
class per_thread
|
||||
{
|
||||
DWORD tls;
|
||||
int clear_on_fork_p;
|
||||
public:
|
||||
per_thread (int forkval = 1) {tls = TlsAlloc (); clear_on_fork_p = forkval;}
|
||||
DWORD get_tls () {return tls;}
|
||||
int clear_on_fork () {return clear_on_fork_p;}
|
||||
|
||||
virtual void *get () {return TlsGetValue (get_tls ());}
|
||||
virtual size_t size () {return 0;}
|
||||
virtual void set (void *s = NULL);
|
||||
virtual void set (int n) {TlsSetValue (get_tls (), (void *)n);}
|
||||
virtual void *create ()
|
||||
{
|
||||
void *s = new char [size ()];
|
||||
memset (s, 0, size ());
|
||||
set (s);
|
||||
return s;
|
||||
}
|
||||
};
|
||||
|
||||
class per_thread_waitq : public per_thread
|
||||
{
|
||||
public:
|
||||
per_thread_waitq () : per_thread (0) {}
|
||||
void *get () {return (waitq *) this->per_thread::get ();}
|
||||
void *create () {return (waitq *) this->per_thread::create ();}
|
||||
size_t size () {return sizeof (waitq);}
|
||||
};
|
||||
|
||||
struct vfork_save
|
||||
{
|
||||
int pid;
|
||||
jmp_buf j;
|
||||
DWORD frame[100];
|
||||
char **vfork_ebp;
|
||||
char **vfork_esp;
|
||||
int is_active () { return pid < 0; }
|
||||
};
|
||||
|
||||
class per_thread_vfork : public per_thread
|
||||
{
|
||||
public:
|
||||
vfork_save *val () { return (vfork_save *) this->per_thread::get (); }
|
||||
vfork_save *create () {return (vfork_save *) this->per_thread::create ();}
|
||||
size_t size () {return sizeof (vfork_save);}
|
||||
};
|
||||
|
||||
extern "C" {
|
||||
struct signal_dispatch
|
||||
{
|
||||
int arg;
|
||||
void (*func) (int);
|
||||
int sig;
|
||||
int saved_errno;
|
||||
DWORD oldmask;
|
||||
DWORD retaddr;
|
||||
DWORD *retaddr_on_stack;
|
||||
};
|
||||
};
|
||||
|
||||
struct per_thread_signal_dispatch : public per_thread
|
||||
{
|
||||
signal_dispatch *get () { return (signal_dispatch *) this->per_thread::get (); }
|
||||
signal_dispatch *create () {return (signal_dispatch *) this->per_thread::create ();}
|
||||
size_t size () {return sizeof (signal_dispatch);}
|
||||
};
|
||||
|
||||
extern per_thread_waitq waitq_storage;
|
||||
extern per_thread_vfork vfork_storage;
|
||||
extern per_thread_signal_dispatch signal_dispatch_storage;
|
||||
|
||||
extern per_thread *threadstuff[];
|
||||
|
Reference in New Issue
Block a user