* init.cc: Cleanup slightly and remove obsolete code.

This commit is contained in:
Christopher Faylor 2002-09-16 16:09:54 +00:00
parent 4e78617321
commit d04cf16c52
5 changed files with 21 additions and 30 deletions

View File

@ -1,11 +1,15 @@
2002-09-16 Christopher Faylor <cgf@redhat.com>
* init.cc: Cleanup slightly and remove obsolete code.
2002-09-11 Robert Collins <rbtcollins@hotmail.com> 2002-09-11 Robert Collins <rbtcollins@hotmail.com>
* init.cc (dll_entry): On thread detach, if the thread hasn't * init.cc (dll_entry): On thread detach, if the thread hasn't
exit()ed, do so. exit()ed, do so.
* pthread.cc (pthread_getsequence_np): Remove the * pthread.cc (pthread_getsequence_np): Remove the
__pthread_getsequence_np wrapper. This requires errno.h. __pthread_getsequence_np wrapper. This requires errno.h.
* thread.cc (pthread::self): Instantiate a new pthread object * thread.cc (pthread::self): Instantiate a new pthread object
when called and none exists. return a NULL object if instantiation when called and none exists. return a NULL object if instantiation
fails. fails.
(pthread::precreate): Factor out common code. (pthread::precreate): Factor out common code.
(pthread::postcreate): Ditto. (pthread::postcreate): Ditto.
@ -38,7 +42,7 @@
(__pthread_getsequence_np): Remove. (__pthread_getsequence_np): Remove.
(__pthread_setschedparam): Apply Extract Method to the object (__pthread_setschedparam): Apply Extract Method to the object
validation. validation.
(pthreadNull::getNullpthread): New method, return the pthreadNull (pthreadNull::getNullpthread): New method, return the pthreadNull
object. object.
(pthreadNull::pthreadNull): Private constructor to prevent accidental (pthreadNull::pthreadNull): Private constructor to prevent accidental
use. use.

View File

@ -1,6 +1,6 @@
/* init.cc /* init.cc
Copyright 1996, 1997, 1998, 1999, 2000, 2001 Red Hat, Inc. Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -38,23 +38,10 @@ WINAPI dll_entry (HANDLE h, DWORD reason, void *static_load)
pthread *thisthread = (pthread *) TlsGetValue ( pthread *thisthread = (pthread *) TlsGetValue (
user_data->threadinterface->thread_self_dwTlsIndex); user_data->threadinterface->thread_self_dwTlsIndex);
if (thisthread) { if (thisthread) {
/* Some non-pthread call created this thread, /* Some non-pthread call created this thread,
* but we need to clean it up */ * but we need to clean it up */
thisthread->exit(0); thisthread->exit(0);
} }
#if 0 // FIXME: REINSTATE SOON
waitq *w;
if ((w = waitq_storage.get ()) != NULL)
{
if (w->thread_ev != NULL)
{
system_printf ("closing %p", w->thread_ev);
(void) CloseHandle (w->thread_ev);
}
memset (w, 0, sizeof(*w)); // FIXME: memory leak
}
// FIXME: Need to add other per_thread stuff here
#endif
break; break;
} }
return 1; return 1;

View File

@ -1,6 +1,6 @@
/* pthread.cc: posix pthread interface for Cygwin /* pthread.cc: posix pthread interface for Cygwin
Copyright 1998, 1999, 2000, 2001 Red Hat, Inc. Copyright 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
Originally written by Marco Fuykschot <marco@ddi.nl> Originally written by Marco Fuykschot <marco@ddi.nl>

View File

@ -377,8 +377,8 @@ pthread::setTlsSelfPointer(pthread *thisThread)
/* member methods */ /* member methods */
pthread::pthread ():verifyable_object (PTHREAD_MAGIC), win32_obj_id (0), pthread::pthread ():verifyable_object (PTHREAD_MAGIC), win32_obj_id (0),
cancelstate (0), canceltype (0), cancel_event(0), cancelstate (0), canceltype (0), cancel_event(0),
joiner (NULL), cleanup_stack(NULL) joiner (NULL), cleanup_stack(NULL)
{ {
} }
@ -434,7 +434,7 @@ pthread::precreate (pthread_attr *newattr)
void void
pthread::create (void *(*func) (void *), pthread_attr *newattr, pthread::create (void *(*func) (void *), pthread_attr *newattr,
void *threadarg) void *threadarg)
{ {
precreate (newattr); precreate (newattr);
if (!magic) if (!magic)
return; return;
@ -483,7 +483,7 @@ pthread::exit (void *value_ptr)
if( __pthread_equal(&joiner, &thread ) ) if( __pthread_equal(&joiner, &thread ) )
delete this; delete this;
else else
{ {
return_ptr = value_ptr; return_ptr = value_ptr;
mutex.UnLock (); mutex.UnLock ();
} }
@ -739,7 +739,7 @@ pthread::setcancelstate (int state, int *oldstate)
else else
{ {
if (oldstate) if (oldstate)
*oldstate = cancelstate; *oldstate = cancelstate;
cancelstate = state; cancelstate = state;
} }
@ -760,7 +760,7 @@ pthread::setcanceltype (int type, int *oldtype)
else else
{ {
if (oldtype) if (oldtype)
*oldtype = canceltype; *oldtype = canceltype;
canceltype = type; canceltype = type;
} }
@ -774,7 +774,7 @@ pthread::push_cleanup_handler (__pthread_cleanup_handler *handler)
{ {
if (this != self ()) if (this != self ())
// TODO: do it? // TODO: do it?
api_fatal ("Attempt to push a cleanup handler across threads"); api_fatal ("Attempt to push a cleanup handler across threads");
handler->next = cleanup_stack; handler->next = cleanup_stack;
InterlockedExchangePointer( &cleanup_stack, handler ); InterlockedExchangePointer( &cleanup_stack, handler );
} }
@ -785,7 +785,7 @@ pthread::pop_cleanup_handler (int const execute)
if (this != self ()) if (this != self ())
// TODO: send a signal or something to the thread ? // TODO: send a signal or something to the thread ?
api_fatal ("Attempt to execute a cleanup handler across threads"); api_fatal ("Attempt to execute a cleanup handler across threads");
mutex.Lock (); mutex.Lock ();
if (cleanup_stack != NULL) if (cleanup_stack != NULL)
@ -793,7 +793,7 @@ pthread::pop_cleanup_handler (int const execute)
__pthread_cleanup_handler *handler = cleanup_stack; __pthread_cleanup_handler *handler = cleanup_stack;
if (execute) if (execute)
(*handler->function) (handler->arg); (*handler->function) (handler->arg);
cleanup_stack = handler->next; cleanup_stack = handler->next;
} }

View File

@ -318,7 +318,7 @@ private:
class pthreadNull : public pthread class pthreadNull : public pthread
{ {
public: public:
static pthread *getNullpthread(); static pthread *getNullpthread();
~pthreadNull(); ~pthreadNull();