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:
authorYaakov Selkowitz <yselkowi@redhat.com>2012-01-06 11:12:18 +0400
committerYaakov Selkowitz <yselkowi@redhat.com>2012-01-06 11:12:18 +0400
commit50350cafb37500a6cf5c1550cfcb2041af1a535a (patch)
treeff4e3d6a83802f971f1b3040d87712703ea6c800 /winsup/cygwin
parent1f94817747280040ae0b4b4af917fba3214255a8 (diff)
* cygwin.din (pthread_sigqueue): Export.
* posix.sgml (std-gnu): Add pthread_sigqueue. * thread.cc (pthread_sigqueue): New function. * include/thread.h (pthread_sigqueue): New function. * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog8
-rw-r--r--winsup/cygwin/cygwin.din1
-rw-r--r--winsup/cygwin/include/cygwin/version.h3
-rw-r--r--winsup/cygwin/include/pthread.h1
-rw-r--r--winsup/cygwin/posix.sgml1
-rw-r--r--winsup/cygwin/thread.cc18
6 files changed, 31 insertions, 1 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index a696795be..8744cc8c9 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,11 @@
+2012-01-06 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
+
+ * cygwin.din (pthread_sigqueue): Export.
+ * posix.sgml (std-gnu): Add pthread_sigqueue.
+ * thread.cc (pthread_sigqueue): New function.
+ * include/thread.h (pthread_sigqueue): New function.
+ * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
+
2012-01-02 Christopher Faylor <me.cygwin2011@cgf.cx>
* path.cc (get_current_dir_name): Avoid memory leak. Don't return PWD
diff --git a/winsup/cygwin/cygwin.din b/winsup/cygwin/cygwin.din
index b46839c9a..b2a974ff9 100644
--- a/winsup/cygwin/cygwin.din
+++ b/winsup/cygwin/cygwin.din
@@ -1270,6 +1270,7 @@ pthread_setschedparam SIGFE
pthread_setschedprio SIGFE
pthread_setspecific SIGFE
pthread_sigmask SIGFE
+pthread_sigqueue SIGFE
pthread_suspend SIGFE
pthread_spin_destroy SIGFE
pthread_spin_init SIGFE
diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h
index 550458312..7b4b2071f 100644
--- a/winsup/cygwin/include/cygwin/version.h
+++ b/winsup/cygwin/include/cygwin/version.h
@@ -427,12 +427,13 @@ details. */
256: Add CW_ALLOC_DRIVE_MAP, CW_MAP_DRIVE_MAP, CW_FREE_DRIVE_MAP.
257: Export getpt.
258: Export get_current_dir_name.
+ 259: Export pthread_sigqueue.
*/
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
#define CYGWIN_VERSION_API_MAJOR 0
-#define CYGWIN_VERSION_API_MINOR 258
+#define CYGWIN_VERSION_API_MINOR 259
/* There is also a compatibity version number associated with the
shared memory regions. It is incremented when incompatible
diff --git a/winsup/cygwin/include/pthread.h b/winsup/cygwin/include/pthread.h
index 8aa734a63..f56de0017 100644
--- a/winsup/cygwin/include/pthread.h
+++ b/winsup/cygwin/include/pthread.h
@@ -202,6 +202,7 @@ void pthread_testcancel (void);
/* Non posix calls */
int pthread_getattr_np (pthread_t, pthread_attr_t *);
+int pthread_sigqueue (pthread_t *, int, const union sigval);
int pthread_suspend (pthread_t);
int pthread_continue (pthread_t);
int pthread_yield (void);
diff --git a/winsup/cygwin/posix.sgml b/winsup/cygwin/posix.sgml
index 185964f32..bba9f0704 100644
--- a/winsup/cygwin/posix.sgml
+++ b/winsup/cygwin/posix.sgml
@@ -1133,6 +1133,7 @@ also IEEE Std 1003.1-2008 (POSIX.1-2008).</para>
pow10f
ppoll
pthread_getattr_np
+ pthread_sigqueue
ptsname_r
removexattr
setxattr
diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc
index 9ca467577..d2a6704c3 100644
--- a/winsup/cygwin/thread.cc
+++ b/winsup/cygwin/thread.cc
@@ -3093,6 +3093,24 @@ pthread_sigmask (int operation, const sigset_t *set, sigset_t *old_set)
return res;
}
+extern "C" int
+pthread_sigqueue (pthread_t *thread, int sig, const union sigval value)
+{
+ siginfo_t si = {0};
+
+ if (!pthread::is_good_object (thread))
+ return EINVAL;
+ if (!(*thread)->valid)
+ return ESRCH;
+
+ si.si_signo = sig;
+ si.si_code = SI_QUEUE;
+ si.si_value = value;
+ si.si_pid = myself->pid;
+ si.si_uid = myself->uid;
+ return sig_send (NULL, si, (*thread)->cygtls);
+}
+
/* ID */
extern "C" int