* dcrt0.cc (do_exit): Eliminate "C" linkage. Call events_terminate early.
(exit_states): Move out of source file into header file. * winsup.h: Move exit_states here. Remove "C" linkage from do_exit declaration. * debug.cc (lock_debug): Remove explicit (and incorrect) external for exit_state. * sigproc.cc (sig_dispatch_pending): Don't flush signals if exiting.
This commit is contained in:
parent
d92d731fa5
commit
3400b4fc44
@ -1,3 +1,14 @@
|
|||||||
|
2003-09-22 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
|
* dcrt0.cc (do_exit): Eliminate "C" linkage. Call events_terminate
|
||||||
|
early.
|
||||||
|
(exit_states): Move out of source file into header file.
|
||||||
|
* winsup.h: Move exit_states here. Remove "C" linkage from do_exit
|
||||||
|
declaration.
|
||||||
|
* debug.cc (lock_debug): Remove explicit (and incorrect) external for
|
||||||
|
exit_state.
|
||||||
|
* sigproc.cc (sig_dispatch_pending): Don't flush signals if exiting.
|
||||||
|
|
||||||
2003-09-20 Christopher Faylor <cgf@redhat.com>
|
2003-09-20 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
* spawn.cc (pthread_cleanup): New struct.
|
* spawn.cc (pthread_cleanup): New struct.
|
||||||
|
@ -956,26 +956,18 @@ __main (void)
|
|||||||
do_global_ctors (user_data->ctors, FALSE);
|
do_global_ctors (user_data->ctors, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum exit_states
|
|
||||||
{
|
|
||||||
ES_NOT_EXITING = 0,
|
|
||||||
ES_THREADTERM,
|
|
||||||
ES_SIGNAL,
|
|
||||||
ES_CLOSEALL,
|
|
||||||
ES_SIGPROCTERMINATE,
|
|
||||||
ES_TITLE,
|
|
||||||
ES_HUP_PGRP,
|
|
||||||
ES_HUP_SID,
|
|
||||||
ES_TTY_TERMINATE,
|
|
||||||
ES_EVENTS_TERMINATE
|
|
||||||
};
|
|
||||||
|
|
||||||
exit_states NO_COPY exit_state;
|
exit_states NO_COPY exit_state;
|
||||||
extern CRITICAL_SECTION exit_lock;
|
extern CRITICAL_SECTION exit_lock;
|
||||||
|
|
||||||
extern "C" void __stdcall
|
void __stdcall
|
||||||
do_exit (int status)
|
do_exit (int status)
|
||||||
{
|
{
|
||||||
|
if (exit_state < ES_EVENTS_TERMINATE)
|
||||||
|
{
|
||||||
|
exit_state = ES_EVENTS_TERMINATE;
|
||||||
|
events_terminate ();
|
||||||
|
}
|
||||||
|
|
||||||
EnterCriticalSection (&exit_lock);
|
EnterCriticalSection (&exit_lock);
|
||||||
UINT n = (UINT) status;
|
UINT n = (UINT) status;
|
||||||
|
|
||||||
@ -1059,12 +1051,6 @@ do_exit (int status)
|
|||||||
tty_terminate ();
|
tty_terminate ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exit_state < ES_EVENTS_TERMINATE)
|
|
||||||
{
|
|
||||||
exit_state = ES_EVENTS_TERMINATE;
|
|
||||||
events_terminate ();
|
|
||||||
}
|
|
||||||
|
|
||||||
minimal_printf ("winpid %d, exit %d", GetCurrentProcessId (), n);
|
minimal_printf ("winpid %d, exit %d", GetCurrentProcessId (), n);
|
||||||
myself->exit (n);
|
myself->exit (n);
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,6 @@ class lock_debug
|
|||||||
public:
|
public:
|
||||||
lock_debug () : acquired (0)
|
lock_debug () : acquired (0)
|
||||||
{
|
{
|
||||||
extern int exit_state;
|
|
||||||
if (locker && !exit_state)
|
if (locker && !exit_state)
|
||||||
acquired = !!locker->acquire (INFINITE);
|
acquired = !!locker->acquire (INFINITE);
|
||||||
}
|
}
|
||||||
|
@ -557,7 +557,7 @@ sigpending (sigset_t *set)
|
|||||||
extern "C" int __stdcall
|
extern "C" int __stdcall
|
||||||
sig_dispatch_pending ()
|
sig_dispatch_pending ()
|
||||||
{
|
{
|
||||||
if (!hwait_sig || GetCurrentThreadId () == sigtid)
|
if (exit_state || !hwait_sig || GetCurrentThreadId () == sigtid)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
sigframe thisframe (mainthread);
|
sigframe thisframe (mainthread);
|
||||||
|
@ -162,7 +162,23 @@ extern "C" int dll_dllcrt0 (HMODULE, per_process *);
|
|||||||
extern "C" int dll_noncygwin_dllcrt0 (HMODULE, per_process *);
|
extern "C" int dll_noncygwin_dllcrt0 (HMODULE, per_process *);
|
||||||
|
|
||||||
/* exit the program */
|
/* exit the program */
|
||||||
extern "C" void __stdcall do_exit (int) __attribute__ ((noreturn));
|
|
||||||
|
enum exit_states
|
||||||
|
{
|
||||||
|
ES_NOT_EXITING = 0,
|
||||||
|
ES_EVENTS_TERMINATE,
|
||||||
|
ES_THREADTERM,
|
||||||
|
ES_SIGNAL,
|
||||||
|
ES_CLOSEALL,
|
||||||
|
ES_SIGPROCTERMINATE,
|
||||||
|
ES_TITLE,
|
||||||
|
ES_HUP_PGRP,
|
||||||
|
ES_HUP_SID,
|
||||||
|
ES_TTY_TERMINATE
|
||||||
|
};
|
||||||
|
|
||||||
|
extern exit_states exit_state;
|
||||||
|
void __stdcall do_exit (int) __attribute__ ((regparm (1), noreturn));
|
||||||
|
|
||||||
/* UID/GID */
|
/* UID/GID */
|
||||||
void uinfo_init (void);
|
void uinfo_init (void);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user