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

Subversion Repositories or1k

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1026 ivang
/*
2
 *  mutexlocksupp.c,v 1.3 2001/01/24 14:17:28 joel Exp
3
 */
4
 
5
#if HAVE_CONFIG_H
6
#include "config.h"
7
#endif
8
 
9
#include <assert.h>
10
#include <errno.h>
11
#include <pthread.h>
12
 
13
#include <rtems/system.h>
14
#include <rtems/score/coremutex.h>
15
#include <rtems/score/watchdog.h>
16
#if defined(RTEMS_MULTIPROCESSING)
17
#include <rtems/score/mpci.h>
18
#endif
19
#include <rtems/posix/mutex.h>
20
#include <rtems/posix/priority.h>
21
#include <rtems/posix/time.h>
22
 
23
/*PAGE
24
 *
25
 *  _POSIX_Mutex_Lock_support
26
 *
27
 *  A support routine which implements guts of the blocking, non-blocking, and
28
 *  timed wait version of mutex lock.
29
 */
30
 
31
int _POSIX_Mutex_Lock_support(
32
  pthread_mutex_t           *mutex,
33
  boolean                    blocking,
34
  Watchdog_Interval          timeout
35
)
36
{
37
  register POSIX_Mutex_Control *the_mutex;
38
  Objects_Locations             location;
39
  ISR_Level                     level;
40
 
41
  the_mutex = _POSIX_Mutex_Get_interrupt_disable( mutex, &location, &level );
42
  switch ( location ) {
43
    case OBJECTS_REMOTE:
44
#if defined(RTEMS_MULTIPROCESSING)
45
      return _POSIX_Mutex_MP_Send_request_packet(
46
          POSIX_MUTEX_MP_OBTAIN_REQUEST,
47
          *mutex,
48
          0,   /* must define the option set */
49
          WATCHDOG_NO_TIMEOUT
50
      );
51
#endif
52
    case OBJECTS_ERROR:
53
      return EINVAL;
54
    case OBJECTS_LOCAL:
55
      _CORE_mutex_Seize(
56
        &the_mutex->Mutex,
57
        the_mutex->Object.id,
58
        blocking,
59
        timeout,
60
        level
61
      );
62
      return _POSIX_Mutex_From_core_mutex_status(
63
        (CORE_mutex_Status) _Thread_Executing->Wait.return_code
64
      );
65
  }
66
  return POSIX_BOTTOM_REACHED();
67
}

powered by: WebSVN 2.1.0

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