[Xenomai-git] Gilles Chanteperdrix : posix: fix pthread_cond_wait syscall signals handling

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

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Fri Dec  4 23:50:37 2009 +0100

posix: fix pthread_cond_wait syscall signals handling

---

 ksrc/nucleus/shadow.c  |2 +-
 ksrc/skins/posix/syscall.c |   14 +-
 2 files changed, 2 insertions(+), 14 deletions(-)

diff --git a/ksrc/nucleus/shadow.c b/ksrc/nucleus/shadow.c
index 0b02f70..b361480 100644
--- a/ksrc/nucleus/shadow.c
+++ b/ksrc/nucleus/shadow.c
@@ -823,7 +823,7 @@ static inline void request_syscall_restart(xnthread_t 
*thread,
if (__xn_interrupted_p(regs)) {
__xn_error_return(regs,
  (sysflags  __xn_exec_norestart) ?
- -ERESTARTNOHAND : -ERESTARTSYS);
+ -EINTR : -ERESTARTSYS);
notify = !xnthread_test_state(thread, XNDEBUG);
}
 
diff --git a/ksrc/skins/posix/syscall.c b/ksrc/skins/posix/syscall.c
index d936f21..4051257 100644
--- a/ksrc/skins/posix/syscall.c
+++ b/ksrc/skins/posix/syscall.c
@@ -1518,18 +1518,6 @@ static int __pthread_cond_wait_prologue(struct 
task_struct *curr,
timed,
XN_INFINITE);
 
-   if (err == EINTR) {
-   do {
-   xnthread_clear_info(cur, XNKICKED);
-   err = pse51_cond_timedwait_epilogue(cur, 
cnd.shadow_cond,
-   mx.shadow_mutex, 
count);
-   }
-   while (err == EINTR);
-   xnthread_set_info(cur, XNKICKED);
-   err = EINTR;
-   }
-
-
if (!err || err == EINTR || err == ETIMEDOUT)
__xn_copy_to_user(curr, (void __user *) __xn_reg_arg3(regs),
  count, sizeof(count));
@@ -2834,7 +2822,7 @@ static xnsysent_t __systab[] = {
[__pse51_cond_init] = {__pthread_cond_init, __xn_exec_any},
[__pse51_cond_destroy] = {__pthread_cond_destroy, __xn_exec_any},
[__pse51_cond_wait_prologue] =
-   {__pthread_cond_wait_prologue, __xn_exec_primary},
+   {__pthread_cond_wait_prologue, __xn_exec_primary | 
__xn_exec_norestart},
[__pse51_cond_wait_epilogue] =
{__pthread_cond_wait_epilogue, __xn_exec_primary},
[__pse51_cond_signal] = {__pthread_cond_signal, __xn_exec_any},


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


[Xenomai-git] Gilles Chanteperdrix : posix: fix pthread_cond_wait syscall signals handling

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

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Fri Dec  4 23:50:37 2009 +0100

posix: fix pthread_cond_wait syscall signals handling

---

 ksrc/nucleus/shadow.c  |2 +-
 ksrc/skins/posix/syscall.c |   14 +-
 2 files changed, 2 insertions(+), 14 deletions(-)

diff --git a/ksrc/nucleus/shadow.c b/ksrc/nucleus/shadow.c
index 0b02f70..b361480 100644
--- a/ksrc/nucleus/shadow.c
+++ b/ksrc/nucleus/shadow.c
@@ -823,7 +823,7 @@ static inline void request_syscall_restart(xnthread_t 
*thread,
if (__xn_interrupted_p(regs)) {
__xn_error_return(regs,
  (sysflags  __xn_exec_norestart) ?
- -ERESTARTNOHAND : -ERESTARTSYS);
+ -EINTR : -ERESTARTSYS);
notify = !xnthread_test_state(thread, XNDEBUG);
}
 
diff --git a/ksrc/skins/posix/syscall.c b/ksrc/skins/posix/syscall.c
index d936f21..4051257 100644
--- a/ksrc/skins/posix/syscall.c
+++ b/ksrc/skins/posix/syscall.c
@@ -1518,18 +1518,6 @@ static int __pthread_cond_wait_prologue(struct 
task_struct *curr,
timed,
XN_INFINITE);
 
-   if (err == EINTR) {
-   do {
-   xnthread_clear_info(cur, XNKICKED);
-   err = pse51_cond_timedwait_epilogue(cur, 
cnd.shadow_cond,
-   mx.shadow_mutex, 
count);
-   }
-   while (err == EINTR);
-   xnthread_set_info(cur, XNKICKED);
-   err = EINTR;
-   }
-
-
if (!err || err == EINTR || err == ETIMEDOUT)
__xn_copy_to_user(curr, (void __user *) __xn_reg_arg3(regs),
  count, sizeof(count));
@@ -2834,7 +2822,7 @@ static xnsysent_t __systab[] = {
[__pse51_cond_init] = {__pthread_cond_init, __xn_exec_any},
[__pse51_cond_destroy] = {__pthread_cond_destroy, __xn_exec_any},
[__pse51_cond_wait_prologue] =
-   {__pthread_cond_wait_prologue, __xn_exec_primary},
+   {__pthread_cond_wait_prologue, __xn_exec_primary | 
__xn_exec_norestart},
[__pse51_cond_wait_epilogue] =
{__pthread_cond_wait_epilogue, __xn_exec_primary},
[__pse51_cond_signal] = {__pthread_cond_signal, __xn_exec_any},


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