|
@@ -14,8 +14,8 @@
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
* GNU General Public License for more details.
|
|
|
*
|
|
|
- * You should have received a copy of the GNU General Public License
|
|
|
- * along with this program; if not, write to the Free Software
|
|
|
+ * You should have received a copy of the GNU General Public License
|
|
|
+ * along with this program; if not, write to the Free Software
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
*/
|
|
|
|
|
@@ -38,7 +38,7 @@ Implements (in lock_ops.h & lock_alloc.h):
|
|
|
void lock_dealloc(gen_lock_t* lock); - deallocates the lock's shared m.
|
|
|
void lock_get(gen_lock_t* lock); - lock (mutex down)
|
|
|
void lock_release(gen_lock_t* lock); - unlock (mutex up)
|
|
|
-
|
|
|
+
|
|
|
lock sets:
|
|
|
----------
|
|
|
type: gen_lock_set_t
|
|
@@ -49,7 +49,17 @@ Implements (in lock_ops.h & lock_alloc.h):
|
|
|
void lock_set_get(gen_lock_set_t* s, int i); - locks sem i from the set
|
|
|
void lock_set_release(gen_lock_set_t* s, int i) - unlocks sem i from the set
|
|
|
|
|
|
-WARNING: - lock_set_init may fail for large number of sems (e.g. sysv).
|
|
|
+ recursive locks:
|
|
|
+ -------------
|
|
|
+ type: rec_lock_t
|
|
|
+ rec_lock_t* rec_lock_alloc(); - allocates a lock in shared mem.
|
|
|
+ rec_lock_t* rec_lock_init(rec_lock_t* lock); - inits the lock
|
|
|
+ void rec_lock_destroy(rec_lock_t* lock); - removes the lock (e.g sysv rmid)
|
|
|
+ void rec_lock_dealloc(rec_lock_t* lock); - deallocates the lock's shared m.
|
|
|
+ void rec_lock_get(rec_lock_t* lock); - lock (mutex down)
|
|
|
+ void rec_lock_release(rec_lock_t* lock); - unlock (mutex up)
|
|
|
+
|
|
|
+WARNING: - lock_set_init may fail for large number of sems (e.g. sysv).
|
|
|
- signals are not treated! (some locks are "awakened" by the signals)
|
|
|
*/
|
|
|
|
|
@@ -58,6 +68,20 @@ WARNING: - lock_set_init may fail for large number of sems (e.g. sysv).
|
|
|
|
|
|
/* the order is important */
|
|
|
#include "lock_ops.h"
|
|
|
-#include "lock_alloc.h"
|
|
|
+#include "lock_alloc.h"
|
|
|
+#include "atomic_ops.h"
|
|
|
+
|
|
|
+typedef struct rec_lock {
|
|
|
+ gen_lock_t lock; /* mutex to access items in the slot */
|
|
|
+ atomic_t locker_pid; /* pid of the process that holds the lock */
|
|
|
+ int rec_lock_level; /* recursive lock count */
|
|
|
+} rec_lock_t;
|
|
|
+
|
|
|
+rec_lock_t* rec_lock_alloc();
|
|
|
+rec_lock_t* rec_lock_init(rec_lock_t* lock);
|
|
|
+void rec_lock_destroy(rec_lock_t* lock);
|
|
|
+void rec_lock_dealloc(rec_lock_t* lock);
|
|
|
+void rec_lock_get(rec_lock_t* lock);
|
|
|
+void rec_lock_release(rec_lock_t* lock);
|
|
|
|
|
|
#endif
|