OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rtems-20020807/] [cpukit/] [posix/] [src/] [conddestroy.c] - Blame information for rev 1771

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1026 ivang
/*
2
 *  conddestroy.c,v 1.2 2001/01/24 14:17:28 joel Exp
3
 */
4
 
5
#if HAVE_CONFIG_H
6
#include "config.h"
7
#endif
8
 
9
#include <pthread.h>
10
#include <errno.h>
11
 
12
#include <rtems/system.h>
13
#include <rtems/score/object.h>
14
#include <rtems/score/states.h>
15
#include <rtems/score/watchdog.h>
16
#include <rtems/posix/cond.h>
17
#include <rtems/posix/time.h>
18
#include <rtems/posix/mutex.h>
19
 
20
/*PAGE
21
 *
22
 *  11.4.2 Initializing and Destroying a Condition Variable,
23
 *         P1003.1c/Draft 10, p. 87
24
 */
25
 
26
int pthread_cond_destroy(
27
  pthread_cond_t           *cond
28
)
29
{
30
  register POSIX_Condition_variables_Control *the_cond;
31
  Objects_Locations                           location;
32
 
33
  the_cond = _POSIX_Condition_variables_Get( cond, &location );
34
  switch ( location ) {
35
    case OBJECTS_REMOTE:
36
#if defined(RTEMS_MULTIPROCESSING)
37
      _Thread_Dispatch();
38
      return POSIX_MP_NOT_IMPLEMENTED();
39
      return EINVAL;
40
#endif
41
 
42
    case OBJECTS_ERROR:
43
      return EINVAL;
44
 
45
 
46
    case OBJECTS_LOCAL:
47
 
48
      if ( _Thread_queue_First( &the_cond->Wait_queue ) ) {
49
        _Thread_Enable_dispatch();
50
        return EBUSY;
51
      }
52
 
53
      _Objects_Close(
54
        &_POSIX_Condition_variables_Information,
55
        &the_cond->Object
56
      );
57
 
58
      _POSIX_Condition_variables_Free( the_cond );
59
 
60
#if defined(RTEMS_MULTIPROCESSING)
61
      if ( the_cond->process_shared == PTHREAD_PROCESS_SHARED ) {
62
 
63
        _Objects_MP_Close(
64
          &_POSIX_Condition_variables_Information,
65
          the_cond->Object.id
66
        );
67
 
68
        _POSIX_Condition_variables_MP_Send_process_packet(
69
          POSIX_CONDITION_VARIABLES_MP_ANNOUNCE_DELETE,
70
          the_cond->Object.id,
71
          0,                         /* Not used */
72
 
73
        );
74
      }
75
#endif
76
      _Thread_Enable_dispatch();
77
      return 0;
78
  }
79
  return POSIX_BOTTOM_REACHED();
80
}

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.