Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2000-10-15 05:37:07 +0400
committerChristopher Faylor <me@cgf.cx>2000-10-15 05:37:07 +0400
commit1dc16fc74bb91136d75b656f3a4aaefa87af9f20 (patch)
treeb0b9173fa268afc99bba53c5814736c5a8b2cca1 /winsup/cygwin/thread.h
parentfdc614360f491de1b76e766b96251895391693b2 (diff)
* 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.h149
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;
};