| /* |
| * |
| * Thread-safe Skiplist Using Integer Identifiers |
| * Copyright 1998-2000 Scott Shambarger (scott@shambarger.net) |
| * |
| * This software is open source. Permission to use, copy, modify, and |
| * distribute this software for any purpose and without fee is hereby granted, |
| * provided that the above copyright notice appear in all copies. No |
| * warranty of any kind is expressed or implied. Use at your own risk. |
| * |
| * 1/14/2001 blong |
| * Made it use neo errs... probably need to check locking functions |
| * for error returns... |
| * |
| */ |
| |
| #ifndef __ULOCKS_H_ |
| #define __ULOCKS_H_ |
| |
| |
| NEOERR *fCreate(int *plock, const char *file); |
| /* |
| * Function: fCreate - create a file lock. |
| * Description: Creates a file lock on named file <file>. The lock is |
| * returned in <plock>. |
| * Input: plock - place for lock. |
| * file - path of file to use as lock. |
| * Output: plock - set to lock identifier. |
| * Return: STATUS_OK on success |
| * NERR_IO on failure |
| * MT-Level: Safe. |
| */ |
| |
| NEOERR *fFind(int *plock, const char *file); |
| /* |
| * Function: fFind - find a file lock. |
| * Description: Find a file identified by the path <file>, and returns a |
| * lock identifier for it in <plock>. If the file doesn't |
| * exist, returns true. |
| * Input: plock - place for lock. |
| * file - path of file to use as lock. |
| * Output: plock - set to lock identifier. |
| * Return: STATUS_OK if found |
| * NERR_IO on failure |
| * MT-Level: Safe. |
| */ |
| |
| void fDestroy(int lock); |
| /* |
| * Function: fDestroy - destroy a lock. |
| * Description: Destroys the lock <lock> that was created by fCreate() |
| * or fFind(). |
| * Input: lock - Lock to destroy. |
| * Output: None. |
| * Return: None. |
| * MT-Level: Safe for unique <lock>. |
| */ |
| |
| NEOERR *fLock(int lock); |
| /* |
| * Function: fLock - acquire file lock. |
| * Description: Acquires the lock identified by <lock>. This call |
| * blocks until the lock is acquired. |
| * Input: lock - Lock to acquire. |
| * Output: None. |
| * Return: STATUS_OK on success |
| * NERR_LOCK on failure |
| * MT-Level: Safe. |
| */ |
| |
| void fUnlock(int lock); |
| /* |
| * Function: fUnlock - release file lock. |
| * Description: Releases the lock identified by <lock>. |
| * Input: lock - Lock to release. |
| * Output: None. |
| * Return: None. |
| * MT-Level: Safe. |
| */ |
| |
| #ifdef HAVE_PTHREADS |
| |
| #include <pthread.h> |
| |
| |
| NEOERR *mCreate(pthread_mutex_t *mutex); |
| /* |
| * Function: mCreate - initialize a mutex. |
| * Description: Initializes the mutex <mutex>. |
| * Input: mutex - mutex to initialize. |
| * Output: None. |
| * Return: STATUS_OK on success |
| * NERR_LOCK on failure |
| * MT-Level: Safe for unique <mutex>. |
| */ |
| |
| void mDestroy(pthread_mutex_t *mutex); |
| /* |
| * Function: mDestroy - destroy a mutex. |
| * Description: Destroys the mutex <mutex> that was initialized by mCreate(). |
| * Input: mutex - mutex to destroy. |
| * Output: None. |
| * Return: None. |
| * MT-Level: Safe for unique <mutex>. |
| */ |
| |
| NEOERR *mLock(pthread_mutex_t *mutex); |
| /* |
| * Function: mLock - lock a mutex. |
| * Description: Locks the mutex <mutex>. This call blocks until the mutex |
| * is acquired. |
| * Input: mutex - mutex to lock. |
| * Output: None. |
| * Return: STATUS_OK on success |
| * NERR_LOCK on failure |
| * MT-Level: Safe. |
| */ |
| |
| NEOERR *mUnlock(pthread_mutex_t *mutex); |
| /* |
| * Function: mUnlock - unlock a mutex. |
| * Description: Unlocks the mutex <mutex>. |
| * Input: mutex - mutex to unlock. |
| * Output: None. |
| * Return: STATUS_OK on success |
| * NERR_LOCK on failure |
| * MT-Level: Safe. |
| */ |
| |
| NEOERR *cCreate(pthread_cond_t *cond); |
| /* |
| * Function: cCreate - initialize a condition variable. |
| * Description: Initializes the condition variable <cond>. |
| * Input: cond - condition variable to initialize. |
| * Output: None. |
| * Return: STATUS_OK on success |
| * NERR_LOCK on failure |
| * MT-Level: Safe for unique <cond>. |
| */ |
| |
| void cDestroy(pthread_cond_t *cond); |
| /* |
| * Function: cDestroy - destroy a condition variable. |
| * Description: Destroys the condition variable <cond> that was |
| * initialized by cCreate(). |
| * Input: cond - condition variable to destroy. |
| * Output: None. |
| * Return: None. |
| * MT-Level: Safe for unique <cond>. |
| */ |
| |
| NEOERR *cWait(pthread_cond_t *cond, pthread_mutex_t *mutex); |
| /* |
| * Function: cWait - wait a condition variable signal. |
| * Description: Waits for a signal on condition variable <cond>. |
| * The mutex <mutex> must be locked by the thread. |
| * Input: cond - condition variable to wait on. |
| * mutex - locked mutex to protect <cond>. |
| * Output: None. |
| * Return: STATUS_OK on success |
| * NERR_LOCK on failure |
| * MT-Level: Safe. |
| */ |
| |
| NEOERR *cBroadcast(pthread_cond_t *cond); |
| /* |
| * Function: cBroadcast - broadcast signal to all waiting threads. |
| * Description: Broadcasts a signal to all threads waiting on condition |
| * variable <cond>. |
| * Input: cond - condition variable to broadcast on. |
| * Output: None. |
| * Return: STATUS_OK on success |
| * NERR_LOCK on failure |
| * MT-Level: Safe. |
| */ |
| |
| NEOERR *cSignal(pthread_cond_t *cond); |
| /* |
| * Function: cSignal - send signal to one waiting thread. |
| * Description: Sends a signal to one thread waiting on condition |
| * variable <cond>. |
| * Input: cond - condition variable to send signal on. |
| * Output: None. |
| * Return: STATUS_OK on success |
| * NERR_LOCK on failure |
| * MT-Level: Safe. |
| */ |
| |
| #endif /* HAVE_PTHREAD */ |
| |
| #endif /* __ULOCKS_H_ */ |