mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-07 16:13:07 +00:00
basic test cases passed
This commit is contained in:
@@ -62,6 +62,35 @@ const pthread_mutexattr_t _POSIX_Mutex_Default_attributes = {
|
|||||||
FALSE /* recursive */
|
FALSE /* recursive */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*PAGE
|
||||||
|
*
|
||||||
|
* _POSIX_Mutex_From_core_mutex_status
|
||||||
|
*/
|
||||||
|
|
||||||
|
int _POSIX_Mutex_From_core_mutex_status(
|
||||||
|
CORE_mutex_Status status
|
||||||
|
)
|
||||||
|
{
|
||||||
|
switch ( status ) {
|
||||||
|
case CORE_MUTEX_STATUS_SUCCESSFUL:
|
||||||
|
return 0;
|
||||||
|
case CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT:
|
||||||
|
return EBUSY;
|
||||||
|
case CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED:
|
||||||
|
return EDEADLK;
|
||||||
|
case CORE_MUTEX_STATUS_NOT_OWNER_OF_RESOURCE:
|
||||||
|
return EPERM;
|
||||||
|
case CORE_MUTEX_WAS_DELETED:
|
||||||
|
return EINVAL;
|
||||||
|
case CORE_MUTEX_TIMEOUT:
|
||||||
|
return EAGAIN;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
assert( 0 );
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*PAGE
|
/*PAGE
|
||||||
*
|
*
|
||||||
* _POSIX_Mutex_Manager_initialization
|
* _POSIX_Mutex_Manager_initialization
|
||||||
@@ -364,8 +393,9 @@ int _POSIX_Mutex_Lock_support(
|
|||||||
timeout
|
timeout
|
||||||
);
|
);
|
||||||
_Thread_Enable_dispatch();
|
_Thread_Enable_dispatch();
|
||||||
return _Thread_Executing->Wait.return_code;
|
return _POSIX_Mutex_From_core_mutex_status(
|
||||||
break;
|
(CORE_mutex_Status) _Thread_Executing->Wait.return_code
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return POSIX_BOTTOM_REACHED();
|
return POSIX_BOTTOM_REACHED();
|
||||||
}
|
}
|
||||||
@@ -419,6 +449,7 @@ int pthread_mutex_unlock(
|
|||||||
{
|
{
|
||||||
register POSIX_Mutex_Control *the_mutex;
|
register POSIX_Mutex_Control *the_mutex;
|
||||||
Objects_Locations location;
|
Objects_Locations location;
|
||||||
|
CORE_mutex_Status status;
|
||||||
|
|
||||||
the_mutex = _POSIX_Mutex_Get( mutex, &location );
|
the_mutex = _POSIX_Mutex_Get( mutex, &location );
|
||||||
switch ( location ) {
|
switch ( location ) {
|
||||||
@@ -432,13 +463,13 @@ int pthread_mutex_unlock(
|
|||||||
MPCI_DEFAULT_TIMEOUT
|
MPCI_DEFAULT_TIMEOUT
|
||||||
);
|
);
|
||||||
case OBJECTS_LOCAL:
|
case OBJECTS_LOCAL:
|
||||||
_CORE_mutex_Surrender(
|
status = _CORE_mutex_Surrender(
|
||||||
&the_mutex->Mutex,
|
&the_mutex->Mutex,
|
||||||
the_mutex->Object.id,
|
the_mutex->Object.id,
|
||||||
POSIX_Threads_mutex_MP_support
|
POSIX_Threads_mutex_MP_support
|
||||||
);
|
);
|
||||||
_Thread_Enable_dispatch();
|
_Thread_Enable_dispatch();
|
||||||
return _Thread_Executing->Wait.return_code; /* XXX return status */
|
return _POSIX_Mutex_From_core_mutex_status( status );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return POSIX_BOTTOM_REACHED();
|
return POSIX_BOTTOM_REACHED();
|
||||||
|
|||||||
@@ -62,6 +62,35 @@ const pthread_mutexattr_t _POSIX_Mutex_Default_attributes = {
|
|||||||
FALSE /* recursive */
|
FALSE /* recursive */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*PAGE
|
||||||
|
*
|
||||||
|
* _POSIX_Mutex_From_core_mutex_status
|
||||||
|
*/
|
||||||
|
|
||||||
|
int _POSIX_Mutex_From_core_mutex_status(
|
||||||
|
CORE_mutex_Status status
|
||||||
|
)
|
||||||
|
{
|
||||||
|
switch ( status ) {
|
||||||
|
case CORE_MUTEX_STATUS_SUCCESSFUL:
|
||||||
|
return 0;
|
||||||
|
case CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT:
|
||||||
|
return EBUSY;
|
||||||
|
case CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED:
|
||||||
|
return EDEADLK;
|
||||||
|
case CORE_MUTEX_STATUS_NOT_OWNER_OF_RESOURCE:
|
||||||
|
return EPERM;
|
||||||
|
case CORE_MUTEX_WAS_DELETED:
|
||||||
|
return EINVAL;
|
||||||
|
case CORE_MUTEX_TIMEOUT:
|
||||||
|
return EAGAIN;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
assert( 0 );
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*PAGE
|
/*PAGE
|
||||||
*
|
*
|
||||||
* _POSIX_Mutex_Manager_initialization
|
* _POSIX_Mutex_Manager_initialization
|
||||||
@@ -364,8 +393,9 @@ int _POSIX_Mutex_Lock_support(
|
|||||||
timeout
|
timeout
|
||||||
);
|
);
|
||||||
_Thread_Enable_dispatch();
|
_Thread_Enable_dispatch();
|
||||||
return _Thread_Executing->Wait.return_code;
|
return _POSIX_Mutex_From_core_mutex_status(
|
||||||
break;
|
(CORE_mutex_Status) _Thread_Executing->Wait.return_code
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return POSIX_BOTTOM_REACHED();
|
return POSIX_BOTTOM_REACHED();
|
||||||
}
|
}
|
||||||
@@ -419,6 +449,7 @@ int pthread_mutex_unlock(
|
|||||||
{
|
{
|
||||||
register POSIX_Mutex_Control *the_mutex;
|
register POSIX_Mutex_Control *the_mutex;
|
||||||
Objects_Locations location;
|
Objects_Locations location;
|
||||||
|
CORE_mutex_Status status;
|
||||||
|
|
||||||
the_mutex = _POSIX_Mutex_Get( mutex, &location );
|
the_mutex = _POSIX_Mutex_Get( mutex, &location );
|
||||||
switch ( location ) {
|
switch ( location ) {
|
||||||
@@ -432,13 +463,13 @@ int pthread_mutex_unlock(
|
|||||||
MPCI_DEFAULT_TIMEOUT
|
MPCI_DEFAULT_TIMEOUT
|
||||||
);
|
);
|
||||||
case OBJECTS_LOCAL:
|
case OBJECTS_LOCAL:
|
||||||
_CORE_mutex_Surrender(
|
status = _CORE_mutex_Surrender(
|
||||||
&the_mutex->Mutex,
|
&the_mutex->Mutex,
|
||||||
the_mutex->Object.id,
|
the_mutex->Object.id,
|
||||||
POSIX_Threads_mutex_MP_support
|
POSIX_Threads_mutex_MP_support
|
||||||
);
|
);
|
||||||
_Thread_Enable_dispatch();
|
_Thread_Enable_dispatch();
|
||||||
return _Thread_Executing->Wait.return_code; /* XXX return status */
|
return _POSIX_Mutex_From_core_mutex_status( status );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return POSIX_BOTTOM_REACHED();
|
return POSIX_BOTTOM_REACHED();
|
||||||
|
|||||||
Reference in New Issue
Block a user