source: rtems/cpukit/posix/src/mutexdestroy.c @ 8da6d77d

4.104.114.95
Last change on this file since 8da6d77d was b8596d8, checked in by Joel Sherrill <joel.sherrill@…>, on 11/28/07 at 18:35:31

2007-11-28 Joel Sherrill <joel.sherrill@…>

  • posix/Makefile.am, posix/preinstall.am, posix/src/cancel.c, posix/src/conddestroy.c, posix/src/condinit.c, posix/src/condsignalsupp.c, posix/src/condwaitsupp.c, posix/src/mqueueclose.c, posix/src/mqueuecreatesupp.c, posix/src/mqueuedeletesupp.c, posix/src/mqueuegetattr.c, posix/src/mqueuenotify.c, posix/src/mqueuerecvsupp.c, posix/src/mqueuesendsupp.c, posix/src/mqueuesetattr.c, posix/src/mqueueunlink.c, posix/src/mutexattrdestroy.c, posix/src/mutexattrgetprioceiling.c, posix/src/mutexattrgetprotocol.c, posix/src/mutexattrgetpshared.c, posix/src/mutexattrinit.c, posix/src/mutexattrsetprioceiling.c, posix/src/mutexattrsetprotocol.c, posix/src/mutexattrsetpshared.c, posix/src/mutexdefaultattributes.c, posix/src/mutexdestroy.c, posix/src/mutexgetprioceiling.c, posix/src/mutexinit.c, posix/src/mutexlocksupp.c, posix/src/mutexsetprioceiling.c, posix/src/mutexunlock.c, posix/src/semaphorecreatesupp.c, posix/src/semaphoredeletesupp.c, posix/src/semaphorewaitsupp.c, posix/src/semclose.c, posix/src/semdestroy.c, posix/src/semgetvalue.c, posix/src/sempost.c, posix/src/semunlink.c, posix/src/types.c, score/cpu/powerpc/rtems/old-exceptions/cpu.h: Remove all pretense of POSIX MP support. The support in place was only a shell. This should make maintenance easier.
  • posix/include/rtems/posix/condmp.h, posix/include/rtems/posix/mqueuemp.h, posix/include/rtems/posix/mutexmp.h, posix/include/rtems/posix/pthreadmp.h, posix/include/rtems/posix/semaphoremp.h, posix/src/condmp.c, posix/src/mutexmp.c, posix/src/semaphoremp.c: Removed.
  • Property mode set to 100644
File size: 1.9 KB
Line 
1/*
2 *  $Id$
3 */
4
5#if HAVE_CONFIG_H
6#include "config.h"
7#endif
8
9#include <errno.h>
10#include <pthread.h>
11
12#include <rtems/system.h>
13#include <rtems/score/coremutex.h>
14#include <rtems/score/watchdog.h>
15#if defined(RTEMS_MULTIPROCESSING)
16#include <rtems/score/mpci.h>
17#endif
18#include <rtems/posix/mutex.h>
19#include <rtems/posix/priority.h>
20#include <rtems/posix/time.h>
21
22/*PAGE
23 *
24 *  11.3.2 Initializing and Destroying a Mutex, P1003.1c/Draft 10, p. 87
25 */
26
27int pthread_mutex_destroy(
28  pthread_mutex_t           *mutex
29)
30{
31  register POSIX_Mutex_Control *the_mutex;
32  Objects_Locations             location;
33
34  the_mutex = _POSIX_Mutex_Get( mutex, &location );
35  switch ( location ) {
36#if defined(RTEMS_MULTIPROCESSING)
37    case OBJECTS_REMOTE:
38#endif
39    case OBJECTS_ERROR:
40      return EINVAL;
41    case OBJECTS_LOCAL:
42       /*
43        * XXX: There is an error for the mutex being locked
44        *  or being in use by a condition variable.
45        */
46
47      if ( _CORE_mutex_Is_locked( &the_mutex->Mutex ) ) {
48        _Thread_Enable_dispatch();
49        return EBUSY;
50      }
51
52      _Objects_Close( &_POSIX_Mutex_Information, &the_mutex->Object );
53
54      _CORE_mutex_Flush(
55        &the_mutex->Mutex,
56#if defined(RTEMS_MULTIPROCESSING)
57        _POSIX_Mutex_MP_Send_object_was_deleted,
58#else
59        NULL,
60#endif
61        EINVAL
62      );
63
64      _POSIX_Mutex_Free( the_mutex );
65
66#if defined(RTEMS_MULTIPROCESSING)
67      if ( the_mutex->process_shared == PTHREAD_PROCESS_SHARED ) {
68
69        _Objects_MP_Close( &_POSIX_Mutex_Information, the_mutex->Object.id );
70
71        _POSIX_Mutex_MP_Send_process_packet(
72          POSIX_MUTEX_MP_ANNOUNCE_DELETE,
73          the_mutex->Object.id,
74          0,                         /* Not used */
75          0                          /* Not used */
76        );
77      }
78#endif
79      _Thread_Enable_dispatch();
80      return 0;
81  }
82  return POSIX_BOTTOM_REACHED();
83}
Note: See TracBrowser for help on using the repository browser.