[Xenomai-git] Gilles Chanteperdrix : posix: revert commit 58c1b922a96fedaef110c925a0dddb0e86dbcaf4

2009-12-05 Thread GIT version control
Module: xenomai-head
Branch: master
Commit: b3e689de20636d5fdeedce28a7416807d412c78f
URL:
http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=b3e689de20636d5fdeedce28a7416807d412c78f

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sat Dec  5 00:03:14 2009 +0100

posix: revert commit 58c1b922a96fedaef110c925a0dddb0e86dbcaf4

we do not want errors other than -EINTR returned by the mutex relocking in
__wrap_pthred_cond_*wait to be ignored.

---

 src/skins/posix/cond.c |   26 +++---
 1 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/src/skins/posix/cond.c b/src/skins/posix/cond.c
index d7087e6..0582367 100644
--- a/src/skins/posix/cond.c
+++ b/src/skins/posix/cond.c
@@ -86,7 +86,7 @@ struct pse51_cond_cleanup_t {
unsigned count;
 };
 
-static void __pthread_cond_relock_mutex(void *data)
+static void __pthread_cond_cleanup(void *data)
 {
struct pse51_cond_cleanup_t *c = (struct pse51_cond_cleanup_t *) data;
int err;
@@ -111,7 +111,7 @@ int __wrap_pthread_cond_wait(pthread_cond_t *cond, 
pthread_mutex_t *mutex)
if (cb_try_read_lock(c.mutex-shadow_mutex.lock, s))
return EINVAL;
 
-   pthread_cleanup_push(__pthread_cond_relock_mutex, c);
+   pthread_cleanup_push(__pthread_cond_cleanup, c);
 
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, oldtype);
 
@@ -124,10 +124,12 @@ int __wrap_pthread_cond_wait(pthread_cond_t *cond, 
pthread_mutex_t *mutex)
 
pthread_cleanup_pop(0);
 
-   if (err == EINTR) {
-   err = 0;
-   __pthread_cond_relock_mutex(c);
-   }
+   while (err == EINTR)
+   err = -XENOMAI_SKINCALL3(__pse51_muxid,
+__pse51_cond_wait_epilogue,
+c.cond-shadow_cond,
+c.mutex-shadow_mutex,
+c.count);
 
cb_read_unlock(c.mutex-shadow_mutex.lock, s);
 
@@ -149,7 +151,7 @@ int __wrap_pthread_cond_timedwait(pthread_cond_t * cond,
if (cb_try_read_lock(c.mutex-shadow_mutex.lock, s))
return EINVAL;
 
-   pthread_cleanup_push(__pthread_cond_relock_mutex, c);
+   pthread_cleanup_push(__pthread_cond_cleanup, c);
 
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, oldtype);
 
@@ -161,10 +163,12 @@ int __wrap_pthread_cond_timedwait(pthread_cond_t * cond,
 
pthread_cleanup_pop(0);
 
-   if (err == EINTR) {
-   err = 0;
-   __pthread_cond_relock_mutex(c);
-   }
+   while (err == EINTR)
+   err = -XENOMAI_SKINCALL3(__pse51_muxid,
+__pse51_cond_wait_epilogue,
+c.cond-shadow_cond,
+c.mutex-shadow_mutex,
+c.count);
 
cb_read_unlock(c.mutex-shadow_mutex.lock, s);
 


___
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : posix: revert commit 58c1b922a96fedaef110c925a0dddb0e86dbcaf4

2009-12-04 Thread GIT version control
Module: xenomai-gch
Branch: for-head
Commit: b3e689de20636d5fdeedce28a7416807d412c78f
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=b3e689de20636d5fdeedce28a7416807d412c78f

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Sat Dec  5 00:03:14 2009 +0100

posix: revert commit 58c1b922a96fedaef110c925a0dddb0e86dbcaf4

we do not want errors other than -EINTR returned by the mutex relocking in
__wrap_pthred_cond_*wait to be ignored.

---

 src/skins/posix/cond.c |   26 +++---
 1 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/src/skins/posix/cond.c b/src/skins/posix/cond.c
index d7087e6..0582367 100644
--- a/src/skins/posix/cond.c
+++ b/src/skins/posix/cond.c
@@ -86,7 +86,7 @@ struct pse51_cond_cleanup_t {
unsigned count;
 };
 
-static void __pthread_cond_relock_mutex(void *data)
+static void __pthread_cond_cleanup(void *data)
 {
struct pse51_cond_cleanup_t *c = (struct pse51_cond_cleanup_t *) data;
int err;
@@ -111,7 +111,7 @@ int __wrap_pthread_cond_wait(pthread_cond_t *cond, 
pthread_mutex_t *mutex)
if (cb_try_read_lock(c.mutex-shadow_mutex.lock, s))
return EINVAL;
 
-   pthread_cleanup_push(__pthread_cond_relock_mutex, c);
+   pthread_cleanup_push(__pthread_cond_cleanup, c);
 
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, oldtype);
 
@@ -124,10 +124,12 @@ int __wrap_pthread_cond_wait(pthread_cond_t *cond, 
pthread_mutex_t *mutex)
 
pthread_cleanup_pop(0);
 
-   if (err == EINTR) {
-   err = 0;
-   __pthread_cond_relock_mutex(c);
-   }
+   while (err == EINTR)
+   err = -XENOMAI_SKINCALL3(__pse51_muxid,
+__pse51_cond_wait_epilogue,
+c.cond-shadow_cond,
+c.mutex-shadow_mutex,
+c.count);
 
cb_read_unlock(c.mutex-shadow_mutex.lock, s);
 
@@ -149,7 +151,7 @@ int __wrap_pthread_cond_timedwait(pthread_cond_t * cond,
if (cb_try_read_lock(c.mutex-shadow_mutex.lock, s))
return EINVAL;
 
-   pthread_cleanup_push(__pthread_cond_relock_mutex, c);
+   pthread_cleanup_push(__pthread_cond_cleanup, c);
 
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, oldtype);
 
@@ -161,10 +163,12 @@ int __wrap_pthread_cond_timedwait(pthread_cond_t * cond,
 
pthread_cleanup_pop(0);
 
-   if (err == EINTR) {
-   err = 0;
-   __pthread_cond_relock_mutex(c);
-   }
+   while (err == EINTR)
+   err = -XENOMAI_SKINCALL3(__pse51_muxid,
+__pse51_cond_wait_epilogue,
+c.cond-shadow_cond,
+c.mutex-shadow_mutex,
+c.count);
 
cb_read_unlock(c.mutex-shadow_mutex.lock, s);
 


___
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git