diff options
author | Christopher Faylor <me@cgf.cx> | 2000-10-15 01:37:07 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2000-10-15 01:37:07 +0000 |
commit | 1dc16fc74bb91136d75b656f3a4aaefa87af9f20 (patch) | |
tree | b0b9173fa268afc99bba53c5814736c5a8b2cca1 /winsup/cygwin/thread.h | |
parent | fdc614360f491de1b76e766b96251895391693b2 (diff) | |
download | cygnal-1dc16fc74bb91136d75b656f3a4aaefa87af9f20.tar.gz cygnal-1dc16fc74bb91136d75b656f3a4aaefa87af9f20.tar.bz2 cygnal-1dc16fc74bb91136d75b656f3a4aaefa87af9f20.zip |
* exceptions.cc (set_console_handler): Don't allocate
console_handler_thread_waiter. It is obsolete.
(ctrl_c_handler): Don't use console_handler_thread_waiter.
* path.cc (hash_path_name): Fix handling of relative names. Make case
insensitive.
* path.h (suffix_info): Use initializers.
* pinfo.h (_pinfo): Avoid initializers for null case.
* resource.cc (fill_rusage): Zero rest of rusage structure.
* security.cc (set_process_privileges): Don't reopen parent process. Just use
hMainProc.
* signal.cc (signal): Track when a signal handler has been used.
(sigaction): Ditto.
* sigproc.cc (pchildren): Use default initializer.
(zombies): Ditto.
(sigproc_terminate): Avoid closing handles that will be closed on exit anyway.
(wait_sig): Send signal to "parent" on EXECing, not FORKing.
(wait_subproc): Send SIGCHLD here rather than in proc_wait to avoid potential
muto conflicts.
* sigproc.h (sigthread): Don't initialize to zero. It's the default.
* spawn.cc (spawn_guts): Fill in resources from exec parent prior to
termination.
* sync.h (muto): Don't initialize to zero.
* syscalls.cc (close_all_files): Use one lock around entire loop and call
fhandler close/release stuff directly.
(_read): Don't use ready_for_read if there are not signal handlers active.
* dcrt0.cc (dll_crt0_1): Fix display of "title".
(do_exit): Use pinfo exit method to exit.
(__api_fatal): Ditto.
* exceptions.cc (signal_exit): Ditto.
* fork.cc (fork_child): Remove debugging stuff. Use pinfo_fixup_after fork in
place of exec_fixup_after_fork.
* pinfo.cc (pinfo_fixup_after_fork): New method.
(pinfo_fixup_in_spawned_child): Ditto.
(_pinfo::exit): New method.
(_pinfo::init): Remove recursion. Detect pathological case where pinfo
structure already exists for new pid.
* pinfo.h (_pinfo): Reorganize slightly. Add new method and new function
declarations.
* sigproc.cc (proc_exists): Previous simplification was a little to simple.
Try harder to detect if a process exists.
(proc_terminate): Use PID_EXITED setting to determine if process is still
around.
(WFSO): Remove debugging statement.
(WFMO): Ditto.
* spawn.cc (exec_fixup_after_fork): Eliminate.
(spawn_guts): Always set old_title to NULL. Is it really needed? Move
hexec_proc to pinfo.cc. Call pinfo_fixup_in_spawned_child to eliminate handle
link after a spawn.
* include/sys/cygwin.h: Remove PID_NOT_IN_USE. Add PID_EXITED.
Diffstat (limited to 'winsup/cygwin/thread.h')
-rw-r--r-- | winsup/cygwin/thread.h | 149 |
1 files changed, 74 insertions, 75 deletions
diff --git a/winsup/cygwin/thread.h b/winsup/cygwin/thread.h index b285faa4f..0ef4725c5 100644 --- a/winsup/cygwin/thread.h +++ b/winsup/cygwin/thread.h @@ -29,7 +29,7 @@ extern "C" #if defined (_CYG_THREAD_FAILSAFE) && defined (_MT_SAFE) void AssertResourceOwner (int, int); #else -#define AssertResourceOwner(i,ii) +# define AssertResourceOwner(i,ii) #endif } @@ -126,17 +126,17 @@ class pinfo; class ResourceLocks { public: -ResourceLocks ():inited (false) {}; -LPCRITICAL_SECTION Lock (int); -void Init (); -void Delete (); + ResourceLocks () {}; + LPCRITICAL_SECTION Lock (int); + void Init (); + void Delete (); #ifdef _CYG_THREAD_FAILSAFE -DWORD owner; -DWORD count; + DWORD owner; + DWORD count; #endif -private: -CRITICAL_SECTION lock; -bool inited; + private: + CRITICAL_SECTION lock; + bool inited; }; @@ -146,100 +146,99 @@ bool inited; class MTitem { -public: -HANDLE win32_obj_id; -UINT return_value; -bool used; -char joinable; // for thread only -bool HandleOke () {return win32_obj_id;} -virtual void Destroy (); -virtual int Id () {return (int) win32_obj_id;} + public: + HANDLE win32_obj_id; + UINT return_value; + bool used; + char joinable; // for thread only + bool HandleOke () {return win32_obj_id;} + virtual void Destroy (); + virtual int Id () {return (int) win32_obj_id;} }; -class ThreadItem:public MTitem +class ThreadItem: public MTitem { public: -pthread_attr_t attr; -TFD (function); -void *arg; -void *return_ptr; -bool suspended; -DWORD thread_id; -DWORD GetThreadId () {return thread_id;} - -/* signal handling */ -struct sigaction *sigs; -sigset_t *sigmask; -LONG *sigtodo; + pthread_attr_t attr; + TFD (function); + void *arg; + void *return_ptr; + bool suspended; + DWORD thread_id; + DWORD GetThreadId () {return thread_id;} + + /* signal handling */ + struct sigaction *sigs; + sigset_t *sigmask; + LONG *sigtodo; }; -class MutexItem:public MTitem +class MutexItem: public MTitem { public: -int Lock (); -int TryLock (); -int UnLock (); + int Lock (); + int TryLock (); + int UnLock (); }; -class SemaphoreItem:public MTitem +class SemaphoreItem: public MTitem { public: -int shared; -int Wait (); -int Post (); -int TryWait (); + int shared; + int Wait (); + int Post (); + int TryWait (); }; typedef struct { -MTitem *items[MT_MAX_ITEMS]; -int index; -} -MTList; + MTitem *items[MT_MAX_ITEMS]; + int index; +} MTList; class MTinterface { public: -// General -DWORD reent_index; -DWORD thread_key; + // General + DWORD reent_index; + DWORD thread_key; -// Used for main thread data, and sigproc thread -struct __reent_t reents; -struct _winsup_t winsup_reent; -ThreadItem mainthread; + // Used for main thread data, and sigproc thread + struct __reent_t reents; + struct _winsup_t winsup_reent; + ThreadItem mainthread; -void Init0 (); -void Init1 (); -void ClearReent (); + void Init0 (); + void Init1 (); + void ClearReent (); -void ReleaseItem (MTitem *); + void ReleaseItem (MTitem *); -// Thread functions -ThreadItem *CreateThread (pthread_t *, TFD (func), void *, pthread_attr_t); -ThreadItem *GetCallingThread (); -ThreadItem *GetThread (pthread_t *); + // Thread functions + ThreadItem *CreateThread (pthread_t *, TFD (func), void *, pthread_attr_t); + ThreadItem *GetCallingThread (); + ThreadItem *GetThread (pthread_t *); -// Mutex functions -MutexItem *CreateMutex (pthread_mutex_t *); -MutexItem *GetMutex (pthread_mutex_t *); + // Mutex functions + MutexItem *CreateMutex (pthread_mutex_t *); + MutexItem *GetMutex (pthread_mutex_t *); -// Semaphore functions -SemaphoreItem *CreateSemaphore (sem_t *, int, int); -SemaphoreItem *GetSemaphore (sem_t * t); + // Semaphore functions + SemaphoreItem *CreateSemaphore (sem_t *, int, int); + SemaphoreItem *GetSemaphore (sem_t * t); private: -// General Administration -MTitem * Find (void *, int (*compare) (void *, void *), int &, MTList *); -MTitem *GetItem (int, MTList *); -MTitem *SetItem (int, MTitem *, MTList *); -int Find (MTitem &, MTList *); -int FindNextUnused (MTList *); - -MTList threadlist; -MTList mutexlist; -MTList semalist; + // General Administration + MTitem * Find (void *, int (*compare) (void *, void *), int &, MTList *); + MTitem *GetItem (int, MTList *); + MTitem *SetItem (int, MTitem *, MTList *); + int Find (MTitem &, MTList *); + int FindNextUnused (MTList *); + + MTList threadlist; + MTList mutexlist; + MTList semalist; }; |