source: trunk/sys/libphoenix/pt_mutex.c @ 50

Last change on this file since 50 was 1, checked in by alain, 8 years ago

First import

File size: 2.9 KB
Line 
1/* Copyright (c) 2007-2009, Stanford University
2* All rights reserved.
3*
4* Redistribution and use in source and binary forms, with or without
5* modification, are permitted provided that the following conditions are met:
6*     * Redistributions of source code must retain the above copyright
7*       notice, this list of conditions and the following disclaimer.
8*     * Redistributions in binary form must reproduce the above copyright
9*       notice, this list of conditions and the following disclaimer in the
10*       documentation and/or other materials provided with the distribution.
11*     * Neither the name of Stanford University nor the names of its
12*       contributors may be used to endorse or promote products derived from
13*       this software without specific prior written permission.
14*
15* THIS SOFTWARE IS PROVIDED BY STANFORD UNIVERSITY ``AS IS'' AND ANY
16* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18* DISCLAIMED. IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE FOR ANY
19* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25*/ 
26
27#include <stdlib.h>
28#include <pthread.h>
29#include <assert.h>
30#include "synch.h"
31
32#define print_error(...)
33
34static mr_lock_t ptmutex_alloc(void)
35{
36    pthread_mutex_t *m;
37    int             err;
38
39    m = malloc(sizeof(pthread_mutex_t));
40    assert (m != NULL);
41
42    err = pthread_mutex_init(m, NULL);
43    assert (err == 0);
44
45    return m;
46}
47
48static void ptmutex_acquire(mr_lock_t l)
49{
50    int err;
51    err = pthread_mutex_lock(l);
52
53    if(err != 0) 
54    {
55      print_error((pthread_mutex_t*)l, 
56                  "%s: tid %x: failed, err %d [%llu]",
57                  __FUNCTION__, 
58                  (unsigned)pthread_self(),
59                  err,
60                  clock());
61    }
62}
63
64static void ptmutex_release(mr_lock_t l)
65{
66    int err;
67   
68    err = pthread_mutex_unlock(l);
69#if 0
70    if(err != 0)
71    {
72      print_error((pthread_mutex_t*)l,
73                  "%s: tid %x: failed, err %d",
74                  __FUNCTION__,
75                  (unsigned)pthread_self(),
76                  err);
77    }
78#endif
79}
80
81static void ptmutex_free(mr_lock_t l)
82{
83    pthread_mutex_destroy(l);
84    free(l);
85}
86
87static mr_lock_t ptmutex_alloc_per_thread(mr_lock_t l)
88{
89  //fprintf(stderr, "%s: @%x\n", __FUNCTION__, (unsigned)l);
90  return l;
91}
92
93static void ptmutex_free_per_thread(mr_lock_t l)
94{
95}
96
97mr_lock_ops mr_ptmutex_ops = {
98    .alloc = ptmutex_alloc,
99    .acquire = ptmutex_acquire,
100    .release = ptmutex_release,
101    .free = ptmutex_free,
102    .alloc_per_thread = ptmutex_alloc_per_thread,
103    .free_per_thread = ptmutex_free_per_thread,
104};
105
106
Note: See TracBrowser for help on using the repository browser.