* sigproc.h (set_signal_mask): Remove default on second parameter and make pass
by reference. * signal.cc (abort): Accommodate change to set_signal_mask. * select.cc (pselect): Ditto. * exceptions.cc (handle_sigsuspend): Ditto. (ctrl_c_handler): Ditto. (sighold): Ditto. (sigrelse): Ditto. (set_process_mask_delta): Ditto. (_cygtls::call_signal_handler): Ditto. * fhandler_disk_file.cc (fhandler_disk_file::readdir): Return ENMFILE if __handle is not set. Set __handle to NULL when out of files. (fhandler_disk_file::rewinddir): Don't close handle if it's NULL. (fhandler_disk_file::closedir): Ditto.
This commit is contained in:
parent
3e4aef50dc
commit
db7f135b03
@ -1,3 +1,21 @@
|
|||||||
|
2005-08-23 Christopher Faylor <cgf@timesys.com>
|
||||||
|
|
||||||
|
* sigproc.h (set_signal_mask): Remove default on second parameter and
|
||||||
|
make pass by reference.
|
||||||
|
* signal.cc (abort): Accommodate change to set_signal_mask.
|
||||||
|
* select.cc (pselect): Ditto.
|
||||||
|
* exceptions.cc (handle_sigsuspend): Ditto.
|
||||||
|
(ctrl_c_handler): Ditto.
|
||||||
|
(sighold): Ditto.
|
||||||
|
(sigrelse): Ditto.
|
||||||
|
(set_process_mask_delta): Ditto.
|
||||||
|
(_cygtls::call_signal_handler): Ditto.
|
||||||
|
|
||||||
|
* fhandler_disk_file.cc (fhandler_disk_file::readdir): Return ENMFILE
|
||||||
|
if __handle is not set. Set __handle to NULL when out of files.
|
||||||
|
(fhandler_disk_file::rewinddir): Don't close handle if it's NULL.
|
||||||
|
(fhandler_disk_file::closedir): Ditto.
|
||||||
|
|
||||||
2005-08-22 Christopher Faylor <cgf@timesys.com>
|
2005-08-22 Christopher Faylor <cgf@timesys.com>
|
||||||
|
|
||||||
* dir.cc (readdir_worker): Make static. Only add '.' and '..' when
|
* dir.cc (readdir_worker): Make static. Only add '.' and '..' when
|
||||||
|
@ -592,7 +592,7 @@ handle_sigsuspend (sigset_t tempmask)
|
|||||||
{
|
{
|
||||||
sigset_t oldmask = myself->getsigmask (); // Remember for restoration
|
sigset_t oldmask = myself->getsigmask (); // Remember for restoration
|
||||||
|
|
||||||
set_signal_mask (tempmask, oldmask);
|
set_signal_mask (tempmask, myself->getsigmask ());
|
||||||
sigproc_printf ("oldmask %p, newmask %p", oldmask, tempmask);
|
sigproc_printf ("oldmask %p, newmask %p", oldmask, tempmask);
|
||||||
|
|
||||||
pthread_testcancel ();
|
pthread_testcancel ();
|
||||||
@ -910,7 +910,7 @@ ctrl_c_handler (DWORD type)
|
|||||||
extern "C" void __stdcall
|
extern "C" void __stdcall
|
||||||
set_process_mask (sigset_t newmask)
|
set_process_mask (sigset_t newmask)
|
||||||
{
|
{
|
||||||
set_signal_mask (newmask);
|
set_signal_mask (newmask, myself->getsigmask ());
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" int
|
extern "C" int
|
||||||
@ -926,7 +926,7 @@ sighold (int sig)
|
|||||||
mask_sync.acquire (INFINITE);
|
mask_sync.acquire (INFINITE);
|
||||||
sigset_t mask = myself->getsigmask ();
|
sigset_t mask = myself->getsigmask ();
|
||||||
sigaddset (&mask, sig);
|
sigaddset (&mask, sig);
|
||||||
set_signal_mask (mask);
|
set_signal_mask (mask, myself->getsigmask ());
|
||||||
mask_sync.release ();
|
mask_sync.release ();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -944,7 +944,7 @@ sigrelse (int sig)
|
|||||||
mask_sync.acquire (INFINITE);
|
mask_sync.acquire (INFINITE);
|
||||||
sigset_t mask = myself->getsigmask ();
|
sigset_t mask = myself->getsigmask ();
|
||||||
sigdelset (&mask, sig);
|
sigdelset (&mask, sig);
|
||||||
set_signal_mask (mask);
|
set_signal_mask (mask, myself->getsigmask ());
|
||||||
mask_sync.release ();
|
mask_sync.release ();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -973,14 +973,14 @@ set_process_mask_delta ()
|
|||||||
/* Set the signal mask for this process.
|
/* Set the signal mask for this process.
|
||||||
Note that some signals are unmaskable, as in UNIX. */
|
Note that some signals are unmaskable, as in UNIX. */
|
||||||
extern "C" void __stdcall
|
extern "C" void __stdcall
|
||||||
set_signal_mask (sigset_t newmask, sigset_t oldmask)
|
set_signal_mask (sigset_t newmask, sigset_t& oldmask)
|
||||||
{
|
{
|
||||||
mask_sync.acquire (INFINITE);
|
mask_sync.acquire (INFINITE);
|
||||||
newmask &= ~SIG_NONMASKABLE;
|
newmask &= ~SIG_NONMASKABLE;
|
||||||
sigset_t mask_bits = oldmask & ~newmask;
|
sigset_t mask_bits = oldmask & ~newmask;
|
||||||
sigproc_printf ("oldmask %p, newmask %p, mask_bits %p", oldmask, newmask,
|
sigproc_printf ("oldmask %p, newmask %p, mask_bits %p", oldmask, newmask,
|
||||||
mask_bits);
|
mask_bits);
|
||||||
myself->setsigmask (newmask); // Set a new mask
|
oldmask = newmask;
|
||||||
if (mask_bits)
|
if (mask_bits)
|
||||||
sig_dispatch_pending (true);
|
sig_dispatch_pending (true);
|
||||||
else
|
else
|
||||||
@ -1225,7 +1225,7 @@ _cygtls::call_signal_handler ()
|
|||||||
sig = 0;
|
sig = 0;
|
||||||
sigfunc (thissig);
|
sigfunc (thissig);
|
||||||
incyg++;
|
incyg++;
|
||||||
set_signal_mask (this_oldmask);
|
set_signal_mask (this_oldmask, myself->getsigmask ());
|
||||||
if (this_errno >= 0)
|
if (this_errno >= 0)
|
||||||
set_errno (this_errno);
|
set_errno (this_errno);
|
||||||
}
|
}
|
||||||
|
@ -1355,6 +1355,11 @@ fhandler_disk_file::readdir (DIR *dir, dirent *de)
|
|||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
|
if (!dir->__handle)
|
||||||
|
{
|
||||||
|
res = ENMFILE;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
if (dir->__handle == INVALID_HANDLE_VALUE && dir->__d_position == 0)
|
if (dir->__handle == INVALID_HANDLE_VALUE && dir->__d_position == 0)
|
||||||
{
|
{
|
||||||
handle = FindFirstFileA (dir->__d_dirname, &buf);
|
handle = FindFirstFileA (dir->__d_dirname, &buf);
|
||||||
@ -1399,11 +1404,8 @@ fhandler_disk_file::readdir (DIR *dir, dirent *de)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
res = geterrno_from_win_error ();
|
res = geterrno_from_win_error ();
|
||||||
if (res != ENMFILE)
|
|
||||||
{
|
|
||||||
FindClose (dir->__handle);
|
FindClose (dir->__handle);
|
||||||
dir->__handle = INVALID_HANDLE_VALUE;
|
dir->__handle = NULL;
|
||||||
}
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1469,6 +1471,7 @@ fhandler_disk_file::rewinddir (DIR *dir)
|
|||||||
{
|
{
|
||||||
if (dir->__handle != INVALID_HANDLE_VALUE)
|
if (dir->__handle != INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
|
if (dir->__handle)
|
||||||
FindClose (dir->__handle);
|
FindClose (dir->__handle);
|
||||||
dir->__handle = INVALID_HANDLE_VALUE;
|
dir->__handle = INVALID_HANDLE_VALUE;
|
||||||
}
|
}
|
||||||
@ -1479,8 +1482,8 @@ int
|
|||||||
fhandler_disk_file::closedir (DIR *dir)
|
fhandler_disk_file::closedir (DIR *dir)
|
||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
if (dir->__handle != INVALID_HANDLE_VALUE &&
|
if (dir->__handle && dir->__handle != INVALID_HANDLE_VALUE
|
||||||
FindClose (dir->__handle) == 0)
|
&& FindClose (dir->__handle) == 0)
|
||||||
{
|
{
|
||||||
__seterrno ();
|
__seterrno ();
|
||||||
res = -1;
|
res = -1;
|
||||||
|
@ -175,11 +175,11 @@ pselect(int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
|||||||
tv.tv_usec = ts->tv_nsec / 1000;
|
tv.tv_usec = ts->tv_nsec / 1000;
|
||||||
}
|
}
|
||||||
if (set)
|
if (set)
|
||||||
set_signal_mask (*set);
|
set_signal_mask (*set, myself->getsigmask ());
|
||||||
int ret = cygwin_select (maxfds, readfds, writefds, exceptfds,
|
int ret = cygwin_select (maxfds, readfds, writefds, exceptfds,
|
||||||
ts ? &tv : NULL);
|
ts ? &tv : NULL);
|
||||||
if (set)
|
if (set)
|
||||||
set_signal_mask (oldset);
|
set_signal_mask (oldset, myself->getsigmask ());
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -329,7 +329,7 @@ abort (void)
|
|||||||
sigset_t sig_mask;
|
sigset_t sig_mask;
|
||||||
sigfillset (&sig_mask);
|
sigfillset (&sig_mask);
|
||||||
sigdelset (&sig_mask, SIGABRT);
|
sigdelset (&sig_mask, SIGABRT);
|
||||||
set_signal_mask (sig_mask);
|
set_signal_mask (sig_mask, myself->getsigmask ());
|
||||||
|
|
||||||
raise (SIGABRT);
|
raise (SIGABRT);
|
||||||
_my_tls.call_signal_handler (); /* Call any signal handler */
|
_my_tls.call_signal_handler (); /* Call any signal handler */
|
||||||
|
@ -56,7 +56,7 @@ extern HANDLE sigCONT;
|
|||||||
|
|
||||||
void __stdcall sig_dispatch_pending (bool fast = false);
|
void __stdcall sig_dispatch_pending (bool fast = false);
|
||||||
#ifdef _PINFO_H
|
#ifdef _PINFO_H
|
||||||
extern "C" void __stdcall set_signal_mask (sigset_t newmask, sigset_t = myself->getsigmask ());
|
extern "C" void __stdcall set_signal_mask (sigset_t newmask, sigset_t&);
|
||||||
#endif
|
#endif
|
||||||
int __stdcall handle_sigprocmask (int sig, const sigset_t *set,
|
int __stdcall handle_sigprocmask (int sig, const sigset_t *set,
|
||||||
sigset_t *oldset, sigset_t& opmask)
|
sigset_t *oldset, sigset_t& opmask)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user