Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 80 → Rev 1031

/shark/trunk/include/fs/mutex.h
25,11 → 25,11
***************************************/
 
/*
* CVS : $Id: mutex.h,v 1.2 2003-03-13 13:37:58 pj Exp $
* CVS : $Id: mutex.h,v 1.3 2006-03-09 16:29:17 tullio Exp $
*
* File: $File$
* Revision: $Revision: 1.2 $
* Last update: $Date: 2003-03-13 13:37:58 $
* Revision: $Revision: 1.3 $
* Last update: $Date: 2006-03-09 16:29:17 $
*/
 
/*
84,34 → 84,7
/*+ Signal a semaphore +*/
#define __mutex_unlock(ptr) (internal_sem_post(ptr))
 
#if 0
/* start old implementation */
 
#include <kernel/model.h>
#include <kernel/func.h>
#include <fs/assert.h>
/*+ a mutex object +*/
typedef mutex_t __mutex_t;
 
/*
The following macros require a pointer to a mutex object and
return nothing.
*/
 
/* Initialize a mutex object +*/
#define __mutex_init(ptr,attr) _assert(mutex_init(ptr,attr)==0)
/*+ Lock a mutex object +*/
#define __mutex_lock(ptr) _assert(mutex_lock(ptr)==0)
/*+ Try to lock a mutex (return 0 on success locking) +*/
#define __mutex_trylock(ptr) (mutex_trylock((ptr)))
/*+ Unlock a mutex +*/
#define __mutex_unlock(ptr) _assert(mutex_unlock(ptr)==0)
 
/* end old implementation */
#endif
 
/*
* fast mutex
*/
 
123,64 → 96,6
#define __fastmutex_lock(ptr) *ptr=kern_fsave()
#define __fastmutex_unlock(ptr) kern_frestore(*ptr)
#if 0
 
/* Hartik 3.x implemantation */
 
/*
#include <hartik/const.h>
typedef struct {
QUEUE queue;
int value;
} __mutex_t;
 
void __mutex_init(__mytex_t *);
void __mutex_lock(__mytex_t *);
int __mutex_trylock(__mytex_t *);
void __mutex_unlock(__mytex_t *);
*/
 
/*
* temporary hack
*/
 
#include <h/sys/kern.h>
#include <h/sys/const.h>
 
/*+ a mutex object +*/
typedef SEM __mutex_t;
 
/*
The following macros require a pointer to a mutex object and
return nothing.
*/
 
#ifdef FSCHECKMUTEX
#include <fs/assert.h>
#define checkmutex(x) assert((x)>=0&&(x)<MAX_SEM)
#else
#define checkmutex(x)
#endif
 
/* Initialize a mutex object +*/
#define __mutex_init(ptr) { *(ptr)=sem_create(1); checkmutex(*ptr); }
 
/*+ Lock a mutex object +*/
#define __mutex_lock(ptr) { checkmutex(*ptr); sem_wait(*(ptr),BLOCK); }
 
/*+ Try to lock a mutex (return 0 on success locking) +*/
#define __mutex_trylock(ptr) { checkmutex(*ptr); sem_wait(*(ptr),NON_BLOCK); }
 
/*+ Unlock a mutex +*/
#define __mutex_unlock(ptr) { checkmutex(*ptr); sem_signal(*(ptr)); }
 
#endif
 
 
 
 
 
__END_DECLS
#endif