From 63edcf242a2cd5d53537bae95943b5fcd0eed5fe Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 2 Nov 1999 18:40:30 +0000 Subject: Split key.c into multiple files. --- cpukit/posix/src/keydelete.c | 53 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 cpukit/posix/src/keydelete.c (limited to 'cpukit/posix/src/keydelete.c') diff --git a/cpukit/posix/src/keydelete.c b/cpukit/posix/src/keydelete.c new file mode 100644 index 0000000000..af012e3638 --- /dev/null +++ b/cpukit/posix/src/keydelete.c @@ -0,0 +1,53 @@ +/* + * $Id$ + */ + +#include +#include +#include +#include + +#include +#include +#include +#include + +/*PAGE + * + * 17.1.3 Thread-Specific Data Key Deletion, P1003.1c/Draft 10, p. 167 + */ + +int pthread_key_delete( + pthread_key_t key +) +{ + register POSIX_Keys_Control *the_key; + Objects_Locations location; + unsigned32 the_class; + + the_key = _POSIX_Keys_Get( key, &location ); + switch ( location ) { + case OBJECTS_ERROR: + case OBJECTS_REMOTE: /* should never happen */ + return EINVAL; + case OBJECTS_LOCAL: + _Objects_Close( &_POSIX_Keys_Information, &the_key->Object ); + + the_key->is_active = FALSE; + + for ( the_class = OBJECTS_CLASSES_FIRST_THREAD_CLASS; + the_class <= OBJECTS_CLASSES_LAST_THREAD_CLASS; + the_class++ ) + _Workspace_Free( the_key->Values[ the_class ] ); + + /* + * NOTE: The destructor is not called and it is the responsibility + * of the application to free the memory. + */ + + _POSIX_Keys_Free( the_key ); + _Thread_Enable_dispatch(); + return 0; + } + return POSIX_BOTTOM_REACHED(); +} -- cgit v1.2.3