From 975a1af43beff9ec9a130e6ea4e758e6b728e237 Mon Sep 17 00:00:00 2001 From: Marty Kraimer Date: Fri, 9 Jul 2004 18:19:18 +0000 Subject: [PATCH] fix OkToBlock --- src/libCom/osi/os/RTEMS/osdThread.c | 39 ++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/src/libCom/osi/os/RTEMS/osdThread.c b/src/libCom/osi/os/RTEMS/osdThread.c index 12b9b0f95..9c153d503 100644 --- a/src/libCom/osi/os/RTEMS/osdThread.c +++ b/src/libCom/osi/os/RTEMS/osdThread.c @@ -48,7 +48,7 @@ struct taskVar { void *parm; unsigned int threadVariableCapacity; void **threadVariables; - int isOkToBlock; + int okToBlock; }; static epicsMutexId taskVarMutex; static struct taskVar *taskVarHead; @@ -214,7 +214,7 @@ setThreadInfo (rtems_id tid, const char *name, EPICSTHREADFUNC funptr,void *parm v->parm = parm; v->threadVariableCapacity = 0; v->threadVariables = NULL; - v->isOkToBlock = 0; + v->okToBlock = 0; note = (rtems_unsigned32)v; rtems_task_set_note (tid, RTEMS_NOTEPAD_TASKVAR, note); taskVarLock (); @@ -454,26 +454,41 @@ epicsThreadId epicsThreadGetId (const char *name) return (epicsThreadId)tid; } -int epicsThreadIsOkToBlock (epicsThreadPrivateId id) +int epicsThreadIsOkToBlock (epicsThreadId id) { - unsigned int varIndex = (unsigned int)id; + rtems_id tid = (rtems_id)id; + rtems_status_code sc; rtems_unsigned32 note; struct taskVar *v; + int okToBlock; - rtems_task_get_note (RTEMS_SELF, RTEMS_NOTEPAD_TASKVAR, ¬e); - v = (struct taskVar *)note; - return v->isOkToBlock; + taskVarLock (); + sc = rtems_task_get_note (tid, RTEMS_NOTEPAD_TASKVAR, ¬e); + if (sc == RTEMS_SUCCESSFUL) { + v = (void *)note; + okToBlock = v->okToBlock; + } + else { + okToBlock = 0; + } + taskVarUnlock (); + return okToBlock; } -void epicsThreadSetOkToBlock (epicsThreadPrivateId id,int isOkToBlock) +void epicsThreadSetOkToBlock (epicsThreadId id,int isOkToBlock) { - unsigned int varIndex = (unsigned int)id; + rtems_id tid = (rtems_id)id; + rtems_status_code sc; rtems_unsigned32 note; struct taskVar *v; - rtems_task_get_note (RTEMS_SELF, RTEMS_NOTEPAD_TASKVAR, ¬e); - v = (struct taskVar *)note; - v->isOkToBlock = isOkToBlock; + taskVarLock (); + sc = rtems_task_get_note (tid, RTEMS_NOTEPAD_TASKVAR, ¬e); + if (sc == RTEMS_SUCCESSFUL) { + v = (void *)note; + v->okToBlock = isOkToBlock; + } + taskVarUnlock (); } /*