|
From: <sv...@va...> - 2009-07-21 16:35:56
|
Author: bart
Date: 2009-07-21 17:35:48 +0100 (Tue, 21 Jul 2009)
New Revision: 10511
Log:
Added more error checking.
Modified:
trunk/drd/tests/rwlock_test.c
Modified: trunk/drd/tests/rwlock_test.c
===================================================================
--- trunk/drd/tests/rwlock_test.c 2009-07-21 16:19:34 UTC (rev 10510)
+++ trunk/drd/tests/rwlock_test.c 2009-07-21 16:35:48 UTC (rev 10511)
@@ -10,11 +10,30 @@
#include <pthread.h>
#include <stdio.h>
+#include <string.h> // strerror()
+#define PTH_CALL(expr) \
+ do \
+ { \
+ int err = (expr); \
+ if ((err) != 0) \
+ { \
+ fprintf(stderr, \
+ "%s:%d %s returned error code %d (%s)\n", \
+ __FILE__, \
+ __LINE__, \
+ #expr, \
+ err, \
+ strerror(err)); \
+ } \
+ } while (0)
+
+
static pthread_rwlock_t s_rwlock;
static int s_counter;
+
static void* thread_func(void* arg)
{
int i;
@@ -22,12 +41,12 @@
for (i = 0; i < 1000; i++)
{
- pthread_rwlock_rdlock(&s_rwlock);
+ PTH_CALL(pthread_rwlock_rdlock(&s_rwlock));
sum += s_counter;
- pthread_rwlock_unlock(&s_rwlock);
- pthread_rwlock_wrlock(&s_rwlock);
+ PTH_CALL(pthread_rwlock_unlock(&s_rwlock));
+ PTH_CALL(pthread_rwlock_wrlock(&s_rwlock));
s_counter++;
- pthread_rwlock_unlock(&s_rwlock);
+ PTH_CALL(pthread_rwlock_unlock(&s_rwlock));
}
return 0;
@@ -39,15 +58,15 @@
pthread_t tid[thread_count];
int i;
- pthread_rwlock_init(&s_rwlock, NULL);
+ PTH_CALL(pthread_rwlock_init(&s_rwlock, NULL));
for (i = 0; i < thread_count; i++)
{
- pthread_create(&tid[i], 0, thread_func, 0);
+ PTH_CALL(pthread_create(&tid[i], 0, thread_func, 0));
}
for (i = 0; i < thread_count; i++)
{
- pthread_join(tid[i], 0);
+ PTH_CALL(pthread_join(tid[i], 0));
}
fprintf(stderr, "Finished.\n");
|