+2002-09-16 Christopher Faylor <cgf@redhat.com>
+
+ * init.cc: Cleanup slightly and remove obsolete code.
+
2002-09-11 Robert Collins <rbtcollins@hotmail.com>
* init.cc (dll_entry): On thread detach, if the thread hasn't
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.
- * thread.cc (pthread::self): Instantiate a new pthread object
- when called and none exists. return a NULL object if instantiation
+ * thread.cc (pthread::self): Instantiate a new pthread object
+ when called and none exists. return a NULL object if instantiation
fails.
(pthread::precreate): Factor out common code.
(pthread::postcreate): Ditto.
(__pthread_getsequence_np): Remove.
(__pthread_setschedparam): Apply Extract Method to the object
validation.
- (pthreadNull::getNullpthread): New method, return the pthreadNull
+ (pthreadNull::getNullpthread): New method, return the pthreadNull
object.
(pthreadNull::pthreadNull): Private constructor to prevent accidental
use.
/* 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.
pthread *thisthread = (pthread *) TlsGetValue (
user_data->threadinterface->thread_self_dwTlsIndex);
if (thisthread) {
- /* Some non-pthread call created this thread,
+ /* Some non-pthread call created this thread,
* but we need to clean it up */
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;
}
return 1;
/* 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>
/* member methods */
pthread::pthread ():verifyable_object (PTHREAD_MAGIC), win32_obj_id (0),
- cancelstate (0), canceltype (0), cancel_event(0),
- joiner (NULL), cleanup_stack(NULL)
+ cancelstate (0), canceltype (0), cancel_event(0),
+ joiner (NULL), cleanup_stack(NULL)
{
}
void
pthread::create (void *(*func) (void *), pthread_attr *newattr,
void *threadarg)
-{
+{
precreate (newattr);
if (!magic)
return;
if( __pthread_equal(&joiner, &thread ) )
delete this;
else
- {
+ {
return_ptr = value_ptr;
mutex.UnLock ();
}
else
{
if (oldstate)
- *oldstate = cancelstate;
+ *oldstate = cancelstate;
cancelstate = state;
}
else
{
if (oldtype)
- *oldtype = canceltype;
+ *oldtype = canceltype;
canceltype = type;
}
{
if (this != self ())
// 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;
InterlockedExchangePointer( &cleanup_stack, handler );
}
if (this != self ())
// TODO: send a signal or something to the thread ?
api_fatal ("Attempt to execute a cleanup handler across threads");
-
+
mutex.Lock ();
if (cleanup_stack != NULL)
__pthread_cleanup_handler *handler = cleanup_stack;
if (execute)
- (*handler->function) (handler->arg);
+ (*handler->function) (handler->arg);
cleanup_stack = handler->next;
}
class pthreadNull : public pthread
{
- public:
+ public:
static pthread *getNullpthread();
~pthreadNull();