diff options
Diffstat (limited to 'cpukit/score/include/rtems')
-rw-r--r-- | cpukit/score/include/rtems/score/coremutex.h | 36 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/interr.h | 3 |
2 files changed, 35 insertions, 4 deletions
diff --git a/cpukit/score/include/rtems/score/coremutex.h b/cpukit/score/include/rtems/score/coremutex.h index 73f92c76e0..32e4f40b5e 100644 --- a/cpukit/score/include/rtems/score/coremutex.h +++ b/cpukit/score/include/rtems/score/coremutex.h @@ -63,6 +63,35 @@ typedef enum { } CORE_mutex_Status; /* + * Mutex lock nesting behavior + * + * CORE_MUTEX_NESTING_ACQUIRES: + * This sequence has no blocking or errors: + * lock(m) + * lock(m) + * unlock(m) + * unlock(m) + * + * CORE_MUTEX_NESTING_IS_ERROR + * This sequence returns an error at the indicated point: + * lock(m) + * lock(m) - already locked error + * unlock(m) + * + * CORE_MUTEX_NESTING_BLOCKS + * This sequence performs as indicated: + * lock(m) + * lock(m) - deadlocks or timeouts + * unlock(m) - releases + */ + +typedef enum { + CORE_MUTEX_NESTING_ACQUIRES, + CORE_MUTEX_NESTING_IS_ERROR, + CORE_MUTEX_NESTING_BLOCKS +} CORE_mutex_Nesting_behaviors; + +/* * Locked and unlocked values */ @@ -75,9 +104,10 @@ typedef enum { */ typedef struct { - boolean allow_nesting; - CORE_mutex_Disciplines discipline; - Priority_Control priority_ceiling; + CORE_mutex_Nesting_behaviors lock_nesting_behavior; + boolean only_owner_release; + CORE_mutex_Disciplines discipline; + Priority_Control priority_ceiling; } CORE_mutex_Attributes; /* diff --git a/cpukit/score/include/rtems/score/interr.h b/cpukit/score/include/rtems/score/interr.h index b2e92906fe..293957ec2b 100644 --- a/cpukit/score/include/rtems/score/interr.h +++ b/cpukit/score/include/rtems/score/interr.h @@ -53,7 +53,8 @@ typedef enum { INTERNAL_ERROR_OUT_OF_GLOBAL_OBJECTS, INTERNAL_ERROR_OUT_OF_PROXIES, INTERNAL_ERROR_INVALID_GLOBAL_ID, - INTERNAL_ERROR_BAD_STACK_HOOK + INTERNAL_ERROR_BAD_STACK_HOOK, + INTERNAL_ERROR_BAD_ATTRIBUTES } Internal_errors_Core_list; /* |