mutex_emul.c revision 170268
159191Skris/* $FreeBSD: head/contrib/ipfilter/lib/mutex_emul.c 170268 2007-06-04 02:54:36Z darrenr $ */ 259191Skris 359191Skris/* 4160814Ssimon * Copyright (C) 2003 by Darren Reed. 5160814Ssimon * 659191Skris * See the IPFILTER.LICENCE file for details on licencing. 759191Skris * 859191Skris * $Id: mutex_emul.c,v 1.2.4.1 2006/06/16 17:21:06 darrenr Exp $ 959191Skris */ 1059191Skris 1159191Skris#include "ipf.h" 1259191Skris 1359191Skris#define EMM_MAGIC 0x9d7adba3 1459191Skris 15127128Snectarvoid eMmutex_enter(mtx, file, line) 16127128SnectareMmutex_t *mtx; 1759191Skrischar *file; 1859191Skrisint line; 1959191Skris{ 2059191Skris if (mtx->eMm_magic != EMM_MAGIC) { 2159191Skris fprintf(stderr, "%s:eMmutex_enter(%p): bad magic: %#x\n", 2259191Skris mtx->eMm_owner, mtx, mtx->eMm_magic); 2359191Skris abort(); 2459191Skris } 2559191Skris if (mtx->eMm_held != 0) { 2659191Skris fprintf(stderr, "%s:eMmutex_enter(%p): already locked: %d\n", 2759191Skris mtx->eMm_owner, mtx, mtx->eMm_held); 2859191Skris abort(); 2959191Skris } 3059191Skris mtx->eMm_held++; 3159191Skris mtx->eMm_heldin = file; 3259191Skris mtx->eMm_heldat = line; 3359191Skris} 3459191Skris 3559191Skris 3659191Skrisvoid eMmutex_exit(mtx) 3759191SkriseMmutex_t *mtx; 3859191Skris{ 3959191Skris if (mtx->eMm_magic != EMM_MAGIC) { 4059191Skris fprintf(stderr, "%s:eMmutex_exit(%p): bad magic: %#x\n", 4159191Skris mtx->eMm_owner, mtx, mtx->eMm_magic); 4259191Skris abort(); 4359191Skris } 4459191Skris if (mtx->eMm_held != 1) { 4559191Skris fprintf(stderr, "%s:eMmutex_exit(%p): not locked: %d\n", 4659191Skris mtx->eMm_owner, mtx, mtx->eMm_held); 4759191Skris abort(); 4859191Skris } 4959191Skris mtx->eMm_held--; 5059191Skris mtx->eMm_heldin = NULL; 5159191Skris mtx->eMm_heldat = 0; 5259191Skris} 5359191Skris 5459191Skris 5559191Skrisvoid eMmutex_init(mtx, who) 5659191SkriseMmutex_t *mtx; 57127128Snectarchar *who; 58127128Snectar{ 59127128Snectar if (mtx->eMm_magic == EMM_MAGIC) { /* safe bet ? */ 60127128Snectar fprintf(stderr, 61127128Snectar "%s:eMmutex_init(%p): already initialised?: %#x\n", 62127128Snectar mtx->eMm_owner, mtx, mtx->eMm_magic); 63127128Snectar abort(); 64127128Snectar } 65127128Snectar mtx->eMm_magic = EMM_MAGIC; 66127128Snectar mtx->eMm_held = 0; 67127128Snectar if (who != NULL) 68127128Snectar mtx->eMm_owner = strdup(who); 69127128Snectar else 70127128Snectar mtx->eMm_owner = NULL; 71127128Snectar} 72127128Snectar 73127128Snectar 74127128Snectarvoid eMmutex_destroy(mtx) 75127128SnectareMmutex_t *mtx; 76127128Snectar{ 77127128Snectar if (mtx->eMm_magic != EMM_MAGIC) { 78127128Snectar fprintf(stderr, "%s:eMmutex_destroy(%p): bad magic: %#x\n", 79127128Snectar mtx->eMm_owner, mtx, mtx->eMm_magic); 80127128Snectar abort(); 81127128Snectar } 82127128Snectar if (mtx->eMm_held != 0) { 83127128Snectar fprintf(stderr, "%s:eMmutex_enter(%p): still locked: %d\n", 84127128Snectar mtx->eMm_owner, mtx, mtx->eMm_held); 85127128Snectar abort(); 86127128Snectar } 87127128Snectar memset(mtx, 0xa5, sizeof(*mtx)); 88127128Snectar} 89127128Snectar