~ubuntu-branches/ubuntu/hardy/9base/hardy

« back to all changes in this revision

Viewing changes to lib9/lock.c

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Baumann
  • Date: 2006-01-25 15:33:00 UTC
  • Revision ID: james.westby@ubuntu.com-20060125153300-6hh4p9wx8iqqply5
Tags: upstream-2
ImportĀ upstreamĀ versionĀ 2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <u.h>
 
2
#include <unistd.h>
 
3
#include <sys/time.h>
 
4
#include <sched.h>
 
5
#include <errno.h>
 
6
#include <libc.h>
 
7
 
 
8
static pthread_mutex_t initmutex = PTHREAD_MUTEX_INITIALIZER;
 
9
 
 
10
static void
 
11
lockinit(Lock *lk)
 
12
{
 
13
        pthread_mutexattr_t attr;
 
14
 
 
15
        pthread_mutex_lock(&initmutex);
 
16
        if(lk->init == 0){
 
17
                pthread_mutexattr_init(&attr);
 
18
                pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL);
 
19
                pthread_mutex_init(&lk->mutex, &attr);
 
20
                pthread_mutexattr_destroy(&attr);
 
21
                lk->init = 1;
 
22
        }
 
23
        pthread_mutex_unlock(&initmutex);
 
24
}
 
25
 
 
26
void
 
27
lock(Lock *lk)
 
28
{
 
29
        if(!lk->init)
 
30
                lockinit(lk);
 
31
        if(pthread_mutex_lock(&lk->mutex) != 0)
 
32
                abort();
 
33
}
 
34
 
 
35
int
 
36
canlock(Lock *lk)
 
37
{
 
38
        int r;
 
39
 
 
40
        if(!lk->init)
 
41
                lockinit(lk);
 
42
        r = pthread_mutex_trylock(&lk->mutex);
 
43
        if(r == 0)
 
44
                return 1;
 
45
        if(r == EBUSY)
 
46
                return 0;
 
47
        abort();
 
48
}
 
49
 
 
50
void
 
51
unlock(Lock *lk)
 
52
{
 
53
        if(pthread_mutex_unlock(&lk->mutex) != 0)
 
54
                abort();
 
55
}