[Xenomai-git] Jan Kiszka : testsuite: Add timed mutex test

2010-03-06 Thread GIT version control
Module: xenomai-jki
Branch: for-upstream
Commit: 766431f4982bb03708590ab3672f9f00d2754530
URL:
http://git.xenomai.org/?p=xenomai-jki.git;a=commit;h=766431f4982bb03708590ab3672f9f00d2754530

Author: Jan Kiszka jan.kis...@siemens.com
Date:   Tue Mar  2 22:35:13 2010 +0100

testsuite: Add timed mutex test

Add test for timeouts while waiting on a mutexe. At this chance, also
tag the output on errors more clearly.

Signed-off-by: Jan Kiszka jan.kis...@siemens.com

---

 src/testsuite/unit/mutex-torture.c |  133 
 1 files changed, 104 insertions(+), 29 deletions(-)

diff --git a/src/testsuite/unit/mutex-torture.c 
b/src/testsuite/unit/mutex-torture.c
index ebdd4f2..ebcb882 100644
--- a/src/testsuite/unit/mutex-torture.c
+++ b/src/testsuite/unit/mutex-torture.c
@@ -27,17 +27,18 @@
 #include asm-generic/bits/current.h /* For internal use, do not use
 in your code. */
 
-#define MUTEX_CREATE   1
-#define MUTEX_LOCK 2
-#define MUTEX_TRYLOCK  3
-#define MUTEX_UNLOCK   4
-#define MUTEX_DESTROY  5
-#define COND_CREATE6
-#define COND_SIGNAL7
-#define COND_WAIT  8
-#define COND_DESTROY   9
-#define THREAD_DETACH  10
-#define THREAD_CREATE  11
+#define MUTEX_CREATE   1
+#define MUTEX_LOCK 2
+#define MUTEX_TRYLOCK  3
+#define MUTEX_TIMED_LOCK   4
+#define MUTEX_UNLOCK   5
+#define MUTEX_DESTROY  6
+#define COND_CREATE7
+#define COND_SIGNAL8
+#define COND_WAIT  9
+#define COND_DESTROY   10
+#define THREAD_DETACH  11
+#define THREAD_CREATE  12
 
 #define NS_PER_MS  100
 
@@ -51,6 +52,16 @@ typedef RT_TASK thread_t;
 typedef RT_COND cond_t;
 #endif /* __NATIVE_SKIN__ */
 
+void timespec_add(struct timespec *ts, unsigned long long value)
+{
+   ts-tv_sec += value / 10;
+   ts-tv_nsec += value % 10;
+   if (ts-tv_nsec  10) {
+   ts-tv_sec++;
+   ts-tv_nsec -= 10;
+   }
+}
+
 void ms_sleep(int time)
 {
 #ifdef XENO_POSIX
@@ -82,14 +93,16 @@ void check_current_prio(int expected_prio)
RT_TASK_INFO task_info;
 
if ((ret = rt_task_inquire(NULL, task_info))  0) {
-   fprintf(stderr, Task inquire: %i (%s)\n, -ret, 
strerror(-ret));
+   fprintf(stderr,
+   FAILURE: Task inquire: %i (%s)\n, -ret, 
strerror(-ret));
exit(EXIT_FAILURE);
}
current_prio = task_info.cprio;
 #endif /* __NATIVE_SKIN__ */
 
if (current_prio != expected_prio) {
-   fprintf(stderr, current prio (%d) != expected prio (%d)\n,
+   fprintf(stderr,
+   FAILURE: current prio (%d) != expected prio (%d)\n,
current_prio, expected_prio);
exit(EXIT_FAILURE);
}
@@ -105,7 +118,8 @@ void check_current_mode(int expected_primary_mode)
current_in_primary = !(xeno_get_current_mode()  XNRELAX);

if (current_in_primary != expected_primary_mode) {
-   fprintf(stderr, current mode (%d) != expected mode (%d)\n,
+   fprintf(stderr,
+   FAILURE: current mode (%d) != expected mode (%d)\n,
current_in_primary, expected_primary_mode);
exit(EXIT_FAILURE);
}
@@ -122,16 +136,18 @@ void yield(void)
 
 int dispatch(const char *service_name, int service_type, int check, ...)
 {
+   unsigned long long timeout;
thread_t *thread;
cond_t *cond;
void *handler;
va_list ap;
int status;
+   mutex_t *mutex;
 #ifdef XENO_POSIX
struct sched_param param;
pthread_attr_t threadattr;
pthread_mutexattr_t mutexattr;
-   pthread_mutex_t *mutex;
+   struct timespec ts;
 #else /* __NATIVE_SKIN__ */
int prio;
 #endif /* __NATIVE_SKIN__ */
@@ -174,6 +190,18 @@ int dispatch(const char *service_name, int service_type, 
int check, ...)
 #endif /* __NATIVE_SKIN__ */
break;
 
+   case MUTEX_TIMED_LOCK:
+   mutex = va_arg(ap, mutex_t *);
+   timeout = va_arg(ap, unsigned long long);
+#ifdef XENO_POSIX
+   clock_gettime(CLOCK_REALTIME, ts);
+   timespec_add(ts, timeout);
+   status = pthread_mutex_timedlock(mutex, ts);
+#else /* __NATIVE_SKIN__ */
+   status = -rt_mutex_acquire(mutex, timeout);
+#endif /* __NATIVE_SKIN__ */
+   break;
+
case MUTEX_UNLOCK:
 #ifdef XENO_POSIX
status = pthread_mutex_unlock(va_arg(ap, pthread_mutex_t *));
@@ -264,7 +292,7 @@ int dispatch(const char *service_name, int service_type, 
int check, ...)
va_end(ap);
 
if (status  0  check) {
-   fprintf(stderr, %s: %i (%s)\n, 
+   fprintf(stderr, FAILURE: %s: %i (%s)\n, 
service_name, status, 

[Xenomai-git] Jan Kiszka : testsuite: Add timed mutex test

2010-03-06 Thread GIT version control
Module: xenomai-jki
Branch: queues/assorted
Commit: 766431f4982bb03708590ab3672f9f00d2754530
URL:
http://git.xenomai.org/?p=xenomai-jki.git;a=commit;h=766431f4982bb03708590ab3672f9f00d2754530

Author: Jan Kiszka jan.kis...@siemens.com
Date:   Tue Mar  2 22:35:13 2010 +0100

testsuite: Add timed mutex test

Add test for timeouts while waiting on a mutexe. At this chance, also
tag the output on errors more clearly.

Signed-off-by: Jan Kiszka jan.kis...@siemens.com

---

 src/testsuite/unit/mutex-torture.c |  133 
 1 files changed, 104 insertions(+), 29 deletions(-)

diff --git a/src/testsuite/unit/mutex-torture.c 
b/src/testsuite/unit/mutex-torture.c
index ebdd4f2..ebcb882 100644
--- a/src/testsuite/unit/mutex-torture.c
+++ b/src/testsuite/unit/mutex-torture.c
@@ -27,17 +27,18 @@
 #include asm-generic/bits/current.h /* For internal use, do not use
 in your code. */
 
-#define MUTEX_CREATE   1
-#define MUTEX_LOCK 2
-#define MUTEX_TRYLOCK  3
-#define MUTEX_UNLOCK   4
-#define MUTEX_DESTROY  5
-#define COND_CREATE6
-#define COND_SIGNAL7
-#define COND_WAIT  8
-#define COND_DESTROY   9
-#define THREAD_DETACH  10
-#define THREAD_CREATE  11
+#define MUTEX_CREATE   1
+#define MUTEX_LOCK 2
+#define MUTEX_TRYLOCK  3
+#define MUTEX_TIMED_LOCK   4
+#define MUTEX_UNLOCK   5
+#define MUTEX_DESTROY  6
+#define COND_CREATE7
+#define COND_SIGNAL8
+#define COND_WAIT  9
+#define COND_DESTROY   10
+#define THREAD_DETACH  11
+#define THREAD_CREATE  12
 
 #define NS_PER_MS  100
 
@@ -51,6 +52,16 @@ typedef RT_TASK thread_t;
 typedef RT_COND cond_t;
 #endif /* __NATIVE_SKIN__ */
 
+void timespec_add(struct timespec *ts, unsigned long long value)
+{
+   ts-tv_sec += value / 10;
+   ts-tv_nsec += value % 10;
+   if (ts-tv_nsec  10) {
+   ts-tv_sec++;
+   ts-tv_nsec -= 10;
+   }
+}
+
 void ms_sleep(int time)
 {
 #ifdef XENO_POSIX
@@ -82,14 +93,16 @@ void check_current_prio(int expected_prio)
RT_TASK_INFO task_info;
 
if ((ret = rt_task_inquire(NULL, task_info))  0) {
-   fprintf(stderr, Task inquire: %i (%s)\n, -ret, 
strerror(-ret));
+   fprintf(stderr,
+   FAILURE: Task inquire: %i (%s)\n, -ret, 
strerror(-ret));
exit(EXIT_FAILURE);
}
current_prio = task_info.cprio;
 #endif /* __NATIVE_SKIN__ */
 
if (current_prio != expected_prio) {
-   fprintf(stderr, current prio (%d) != expected prio (%d)\n,
+   fprintf(stderr,
+   FAILURE: current prio (%d) != expected prio (%d)\n,
current_prio, expected_prio);
exit(EXIT_FAILURE);
}
@@ -105,7 +118,8 @@ void check_current_mode(int expected_primary_mode)
current_in_primary = !(xeno_get_current_mode()  XNRELAX);

if (current_in_primary != expected_primary_mode) {
-   fprintf(stderr, current mode (%d) != expected mode (%d)\n,
+   fprintf(stderr,
+   FAILURE: current mode (%d) != expected mode (%d)\n,
current_in_primary, expected_primary_mode);
exit(EXIT_FAILURE);
}
@@ -122,16 +136,18 @@ void yield(void)
 
 int dispatch(const char *service_name, int service_type, int check, ...)
 {
+   unsigned long long timeout;
thread_t *thread;
cond_t *cond;
void *handler;
va_list ap;
int status;
+   mutex_t *mutex;
 #ifdef XENO_POSIX
struct sched_param param;
pthread_attr_t threadattr;
pthread_mutexattr_t mutexattr;
-   pthread_mutex_t *mutex;
+   struct timespec ts;
 #else /* __NATIVE_SKIN__ */
int prio;
 #endif /* __NATIVE_SKIN__ */
@@ -174,6 +190,18 @@ int dispatch(const char *service_name, int service_type, 
int check, ...)
 #endif /* __NATIVE_SKIN__ */
break;
 
+   case MUTEX_TIMED_LOCK:
+   mutex = va_arg(ap, mutex_t *);
+   timeout = va_arg(ap, unsigned long long);
+#ifdef XENO_POSIX
+   clock_gettime(CLOCK_REALTIME, ts);
+   timespec_add(ts, timeout);
+   status = pthread_mutex_timedlock(mutex, ts);
+#else /* __NATIVE_SKIN__ */
+   status = -rt_mutex_acquire(mutex, timeout);
+#endif /* __NATIVE_SKIN__ */
+   break;
+
case MUTEX_UNLOCK:
 #ifdef XENO_POSIX
status = pthread_mutex_unlock(va_arg(ap, pthread_mutex_t *));
@@ -264,7 +292,7 @@ int dispatch(const char *service_name, int service_type, 
int check, ...)
va_end(ap);
 
if (status  0  check) {
-   fprintf(stderr, %s: %i (%s)\n, 
+   fprintf(stderr, FAILURE: %s: %i (%s)\n, 
service_name, status,