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:
authorCorinna Vinschen <corinna@vinschen.de>2011-04-30 20:34:48 +0400
committerCorinna Vinschen <corinna@vinschen.de>2011-04-30 20:34:48 +0400
commit1804be048ac341df4162dc954e7319adb4ce915c (patch)
treedb6bff3c9af11a7371b343064e6d3f9a03b5acb1 /winsup/cygwin/thread.cc
parentcbec4110a232424225633a593512969aa8e10ac8 (diff)
* fcntl.cc (fcntl64): Call pthread_testcancel.
* fhandler_socket.cc (fhandler_socket::connect): Ditto. (fhandler_socket::accept4): Ditto. (fhandler_socket::recvfrom): Ditto. (fhandler_socket::recvmsg): Ditto. (fhandler_socket::sendto): Ditto. (fhandler_socket::sendmsg): Ditto. * flock.cc (lf_setlock): Allow to cancel thread running blocking file lock. Try to make code more readable. (lockf): Call pthread_testcancel. * mmap.cc (msync): Ditto. * posix_ipc.cc (ipc_cond_timedwait): Call pthread::static_cancel_self rather than pthread_testcancel. * select.cc (cygwin_select): Call pthread_testcancel. * syscalls.cc (pread): Ditto. (pwrite): Ditto. (readv): Ditto. (writev): Ditto. (open): Ditto. (close): Ditto. (fsync): Ditto. * termios.cc (tcdrain): Ditto. * thread.cc: Align list of cancellation points with above changes. Mark not-implemented functions, too. (cancelable_wait): Don't set unused object indices to WAIT_FAILED since that could result in wrong behaviour. Set them to the invalid value WAIT_TIMEOUT + 1 instead.
Diffstat (limited to 'winsup/cygwin/thread.cc')
-rw-r--r--winsup/cygwin/thread.cc161
1 files changed, 81 insertions, 80 deletions
diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc
index 10fc2c66b..b4a9b2982 100644
--- a/winsup/cygwin/thread.cc
+++ b/winsup/cygwin/thread.cc
@@ -568,79 +568,80 @@ pthread::cancel ()
/* TODO: Insert pthread_testcancel into the required functions.
Here are the lists of required and optional functions per POSIX.1-2001
- and POSIX.1-2008. A start (*) indicates that the Cygwin function already
- is a cancellation point (aka "calls pthread_testcancel").
+ and POSIX.1-2008. A star (*) indicates that the Cygwin function already
+ is a cancellation point (aka "calls pthread_testcancel"), an o (o)
+ indicates that the function is not implemented in Cygwin.
Required cancellation points:
- accept ()
- aio_suspend ()
- clock_nanosleep ()
+ * accept ()
+ o aio_suspend ()
+ o clock_nanosleep ()
* close ()
- connect ()
+ * connect ()
* creat ()
- fcntl () F_SETLKW
- fdatasync ()
- fsync ()
- getmsg ()
- getpmsg ()
- lockf () F_LOCK
+ * fcntl () F_SETLKW
+ * fdatasync ()
+ * fsync ()
+ o getmsg ()
+ o getpmsg ()
+ * lockf () F_LOCK
* mq_receive ()
* mq_send ()
* mq_timedreceive ()
* mq_timedsend ()
msgrcv ()
msgsnd ()
- msync ()
- nanosleep ()
- open ()
- openat ()
+ * msync ()
+ * nanosleep ()
+ * open ()
+ * openat ()
* pause ()
poll ()
- pread ()
+ * pread ()
pselect ()
* pthread_cond_timedwait ()
* pthread_cond_wait ()
* pthread_join ()
* pthread_testcancel ()
- putmsg ()
- putpmsg ()
- pwrite ()
- read ()
- readv ()
- recv ()
- recvfrom ()
- recvmsg ()
+ o putmsg ()
+ o putpmsg ()
+ * pwrite ()
+ * read ()
+ * readv ()
+ * recv ()
+ * recvfrom ()
+ * recvmsg ()
select ()
* sem_timedwait ()
* sem_wait ()
- send ()
- sendmsg ()
- sendto ()
+ * send ()
+ * sendmsg ()
+ * sendto ()
* sigpause ()
* sigsuspend ()
- sigtimedwait ()
- sigwait ()
- sigwaitinfo ()
+ o sigtimedwait ()
+ * sigwait ()
+ * sigwaitinfo ()
* sleep ()
* system ()
- tcdrain ()
+ * tcdrain ()
* usleep ()
* wait ()
* wait3()
- waitid ()
+ o waitid ()
* waitpid ()
- write ()
- writev ()
+ * write ()
+ * writev ()
Optional cancellation points:
access ()
asctime ()
asctime_r ()
- catclose ()
- catgets ()
- catopen ()
+ catclose () Implemented externally: libcatgets
+ catgets () Implemented externally: libcatgets
+ catopen () Implemented externally: libcatgets
chmod ()
chown ()
closedir ()
@@ -648,18 +649,18 @@ pthread::cancel ()
ctermid ()
ctime ()
ctime_r ()
- dbm_close ()
- dbm_delete ()
- dbm_fetch ()
- dbm_nextkey ()
- dbm_open ()
- dbm_store ()
+ dbm_close () Implemented externally: libgdbm
+ dbm_delete () Implemented externally: libgdbm
+ dbm_fetch () Implemented externally: libgdbm
+ dbm_nextkey () Implemented externally: libgdbm
+ dbm_open () Implemented externally: libgdbm
+ dbm_store () Implemented externally: libgdbm
dlclose ()
dlopen ()
dprintf ()
endgrent ()
endhostent ()
- endnetent ()
+ o endnetent ()
endprotoent ()
endpwent ()
endservent ()
@@ -669,15 +670,15 @@ pthread::cancel ()
fchmodat ()
fchown ()
fchownat ()
- fclose ()
- fcntl () (any value)
+ * fclose ()
+ * fcntl () (any value)
fflush ()
fgetc ()
fgetpos ()
fgets ()
fgetwc ()
fgetws ()
- fmtmsg ()
+ o fmtmsg ()
fopen ()
fpathconf ()
fprintf ()
@@ -706,7 +707,7 @@ pthread::cancel ()
getchar ()
getchar_unlocked ()
getcwd ()
- getdate ()
+ o getdate ()
getdelim ()
getgrent ()
getgrgid ()
@@ -722,9 +723,9 @@ pthread::cancel ()
getlogin ()
getlogin_r ()
getnameinfo ()
- getnetbyaddr ()
- getnetbyname ()
- getnetent ()
+ o getnetbyaddr ()
+ o getnetbyname ()
+ o getnetent ()
getopt () (if opterr is nonzero)
getprotobyname ()
getprotobynumber ()
@@ -745,15 +746,15 @@ pthread::cancel ()
getwchar ()
getwd ()
glob ()
- iconv_close ()
- iconv_open ()
+ iconv_close () Implemented externally: libiconv
+ iconv_open () Implemented externally: libiconv
ioctl ()
link ()
linkat ()
- lio_listio ()
+ o lio_listio ()
localtime ()
localtime_r ()
- lockf ()
+ * lockf ()
lseek ()
lstat ()
mkdir ()
@@ -776,28 +777,28 @@ pthread::cancel ()
posix_fallocate ()
posix_madvise ()
posix_openpt ()
- posix_spawn ()
- posix_spawnp ()
- posix_trace_clear ()
- posix_trace_close ()
- posix_trace_create ()
- posix_trace_create_withlog ()
- posix_trace_eventtypelist_getnext_id ()
- posix_trace_eventtypelist_rewind ()
- posix_trace_flush ()
- posix_trace_get_attr ()
- posix_trace_get_filter ()
- posix_trace_get_status ()
- posix_trace_getnext_event ()
- posix_trace_open ()
- posix_trace_rewind ()
- posix_trace_set_filter ()
- posix_trace_shutdown ()
- posix_trace_timedgetnext_event ()
- posix_typed_mem_open ()
+ o posix_spawn ()
+ o posix_spawnp ()
+ o posix_trace_clear ()
+ o posix_trace_close ()
+ o posix_trace_create ()
+ o posix_trace_create_withlog ()
+ o posix_trace_eventtypelist_getnext_id ()
+ o posix_trace_eventtypelist_rewind ()
+ o posix_trace_flush ()
+ o posix_trace_get_attr ()
+ o posix_trace_get_filter ()
+ o posix_trace_get_status ()
+ o posix_trace_getnext_event ()
+ o posix_trace_open ()
+ o posix_trace_rewind ()
+ o posix_trace_set_filter ()
+ o posix_trace_shutdown ()
+ o posix_trace_timedgetnext_event ()
+ o posix_typed_mem_open ()
printf ()
- psiginfo ()
- psignal ()
+ o psiginfo ()
+ o psignal ()
pthread_rwlock_rdlock ()
pthread_rwlock_timedrdlock ()
pthread_rwlock_timedwrlock ()
@@ -825,7 +826,7 @@ pthread::cancel ()
semop ()
setgrent ()
sethostent ()
- setnetent ()
+ o setnetent ()
setprotoent ()
setpwent ()
setservent ()
@@ -908,7 +909,7 @@ cancelable_wait (HANDLE object, DWORD timeout,
DWORD cancel_n;
if (cancel_action == cw_no_cancel || !pthread::is_good_object (&thread) ||
thread->cancelstate == PTHREAD_CANCEL_DISABLE)
- cancel_n = (DWORD) -1;
+ cancel_n = WAIT_TIMEOUT + 1;
else
{
cancel_n = WAIT_OBJECT_0 + num++;
@@ -917,7 +918,7 @@ cancelable_wait (HANDLE object, DWORD timeout,
DWORD sig_n;
if (sig_wait == cw_sig_nosig || &_my_tls != _main_tls)
- sig_n = (DWORD) -1;
+ sig_n = WAIT_TIMEOUT + 1;
else
{
sig_n = WAIT_OBJECT_0 + num++;