basic test cases passed

This commit is contained in:
Joel Sherrill
1996-07-04 18:09:23 +00:00
parent ce78b89451
commit 69c9543543
2 changed files with 70 additions and 8 deletions

View File

@@ -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();

View File

@@ -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();