From 1dc16fc74bb91136d75b656f3a4aaefa87af9f20 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sun, 15 Oct 2000 01:37:07 +0000 Subject: * 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. --- winsup/cygwin/thread.h | 149 ++++++++++++++++++++++++------------------------- 1 file changed, 74 insertions(+), 75 deletions(-) (limited to 'winsup/cygwin/thread.h') 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; }; -- cgit v1.2.3