diff options
author | Henrik Rentz-Reichert | 2013-06-05 13:29:01 +0000 |
---|---|---|
committer | Henrik Rentz-Reichert | 2013-06-05 13:29:01 +0000 |
commit | aec457748f8c5bd807978e3d07eaa49eb618acb5 (patch) | |
tree | 798c3208421d76a2851961a144301e1ec9efb7e3 /runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC | |
parent | 272815ea1a816569edc6629ca4f2db8e874100cc (diff) | |
download | org.eclipse.etrice-aec457748f8c5bd807978e3d07eaa49eb618acb5.tar.gz org.eclipse.etrice-aec457748f8c5bd807978e3d07eaa49eb618acb5.tar.xz org.eclipse.etrice-aec457748f8c5bd807978e3d07eaa49eb618acb5.zip |
[runtime.c] still debugging...
Diffstat (limited to 'runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC')
5 files changed, 44 insertions, 11 deletions
diff --git a/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etDatatypes.h b/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etDatatypes.h index 81f5d89b9..fab2d8e15 100644 --- a/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etDatatypes.h +++ b/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etDatatypes.h @@ -93,7 +93,7 @@ typedef int16 etAddressId; typedef pthread_mutex_t etOSMutexData; typedef pthread_t etOSThreadData; -typedef pid_t etOSThreadId; +typedef pthread_t etOSThreadId; typedef sem_t etOSSemaData; typedef struct { void* next; diff --git a/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etSema.c b/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etSema.c index 94213f4ec..81f040b2a 100644 --- a/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etSema.c +++ b/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etSema.c @@ -16,6 +16,8 @@ * */ +#include <errno.h> + #include "osal/etSema.h" #include "etDatatypes.h" @@ -38,12 +40,39 @@ void etSema_destruct(etSema* self){ void etSema_wakeup(etSema* self){ ET_MSC_LOGGER_SYNC_ENTRY("etSema", "wakeup") - sem_post(&(self->osData)); + { + int sval = 0; + sem_getvalue(&(self->osData), &sval); + printf("etSema_wakeup: %p before post val=%d\n", (void*)self, sval); + sem_post(&(self->osData)); + sem_getvalue(&(self->osData), &sval); + printf("etSema_wakeup: %p after post val=%d\n", (void*)self, sval); + fflush(stdout); + } ET_MSC_LOGGER_SYNC_EXIT } void etSema_waitForWakeup(etSema* self){ ET_MSC_LOGGER_SYNC_ENTRY("etSema", "waitForWakeup") - sem_wait(&(self->osData)); + { + int again = FALSE; + + printf("etSema_waitForWakeup: %p wait %ld\n", (void*)self, pthread_self()); fflush(stdout); // TODO: remove debug output + do { + errno = 0; + if (sem_wait(&(self->osData))==-1) { + if (errno==EINTR) { + int sval = 0; + sem_getvalue(&(self->osData), &sval); + again = FALSE; + printf("etSema_waitForWakeup: %p interrupted - again %ld (val=%d)\n", (void*)self, pthread_self(), sval); fflush(stdout); // TODO: remove debug output + } + else + again = FALSE; + } + } + while (again); + printf("etSema_waitForWakeup: %p waked up %ld\n", (void*)self, pthread_self()); fflush(stdout); // TODO: remove debug output + } ET_MSC_LOGGER_SYNC_EXIT } diff --git a/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etTcpSockets.c b/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etTcpSockets.c index cd2fbbf8f..b2968278e 100644 --- a/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etTcpSockets.c +++ b/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etTcpSockets.c @@ -88,7 +88,7 @@ static void listenerThreadFunc(void* threadData) { while (self->data.maxConnections > self->nConnections) {
int slot;
- int len;
+ socklen_t len;
/* find next free slot */
for (slot=0; slot<MAX_CONNECTIONS; ++slot)
diff --git a/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etThread.c b/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etThread.c index 95fc528da..f40bc385e 100644 --- a/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etThread.c +++ b/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etThread.c @@ -21,7 +21,6 @@ #include "debugging/etLogger.h" #include "debugging/etMSCLogger.h" -#include <process.h> #include <time.h> #include <sys/unistd.h> @@ -108,6 +107,6 @@ etOSThreadData etThread_self(void){ } etOSThreadId etThread_self_id(void){ - return 0; + return pthread_self(); } diff --git a/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etTimer.c b/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etTimer.c index 7dba99ffd..9e857a336 100644 --- a/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etTimer.c +++ b/runtime/org.eclipse.etrice.runtime.c/src/platforms/MT_POSIX_GENERIC_GCC/etTimer.c @@ -54,7 +54,7 @@ static etBool timer_initialized = FALSE; static etThread timer_thread; -/* semaphore used for signalling */ +/* semaphore used for signaling */ static etSema timer_sema; /* mutex to guard linked list access */ @@ -63,6 +63,7 @@ static etMutex timer_mutex; static void timerThreadFunction(void* data) { while (TRUE) { etTimer* it; + int idx; printf("timerThreadFunction: waiting\n"); fflush(stdout); // remove debug output etSema_waitForWakeup(&timer_sema); @@ -70,11 +71,11 @@ static void timerThreadFunction(void* data) { printf("timerThreadFunction: checking\n"); fflush(stdout); // remove debug output etMutex_enter(&timer_mutex); - for (it=timers; it!=NULL; it=(etTimer*) it->osTimerData.next) { + for (it=timers, idx=0; it!=NULL; it=(etTimer*) it->osTimerData.next, ++idx) { if (it->osTimerData.signaled) { + printf("timerThreadFunction: signaled %d, calling user fct %p\n", idx, (void*)it->timerFunction); fflush(stdout); // remove debug output it->osTimerData.signaled = FALSE; it->timerFunction(it->timerFunctionData); - printf("timerThreadFunction: signaled\n"); fflush(stdout); // remove debug output } } etMutex_leave(&timer_mutex); @@ -90,9 +91,12 @@ static void timerHandler(int sig, siginfo_t *si, void *uc) { etMutex_enter(&timer_mutex); for (it=timers; it!=NULL; it=(etTimer*) it->osTimerData.next) { if (&it->osTimerData.timerid==tid) { + int sval = 0; + sem_getvalue(&(timer_sema.osData), &sval); it->osTimerData.signaled = TRUE; - etSema_wakeup(&timer_sema); - printf("timerHandler\n"); fflush(stdout); // TODO: remove debug output + if (sval==0) + etSema_wakeup(&timer_sema); + printf("timerHandler signaled\n"); fflush(stdout); // TODO: remove debug output break; } } @@ -163,6 +167,7 @@ void etTimer_construct(etTimer* self, etTime* timerInterval, etTimerFunction tim fflush(stderr); return; } + printf("etTimer_construct: user callback is %p\n", (void*)self->timerFunction); fflush(stdout); // TODO: remove debug output } } ET_MSC_LOGGER_SYNC_EXIT |