1 /*********************************************************************** 2 * * 3 * This software is part of the ast package * 4 * Copyright (c) 1985-2007 AT&T Knowledge Ventures * 5 * and is licensed under the * 6 * Common Public License, Version 1.0 * 7 * by AT&T Knowledge Ventures * 8 * * 9 * A copy of the License is available at * 10 * http://www.opensource.org/licenses/cpl1.0.txt * 11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 12 * * 13 * Information and Software Systems Research * 14 * AT&T Research * 15 * Florham Park NJ * 16 * * 17 * Glenn Fowler <gsf@research.att.com> * 18 * David Korn <dgk@research.att.com> * 19 * Phong Vo <kpv@research.att.com> * 20 * * 21 ***********************************************************************/ 22 #include "sfhdr.h" 23 24 /* Obtain/release exclusive use of a stream. 25 ** 26 ** Written by Kiem-Phong Vo. 27 */ 28 29 /* the main locking/unlocking interface */ 30 #if __STD_C 31 int sfmutex(Sfio_t* f, int type) 32 #else 33 int sfmutex(f, type) 34 Sfio_t* f; 35 int type; 36 #endif 37 { 38 #if !vt_threaded 39 NOTUSED(f); NOTUSED(type); 40 return 0; 41 #else 42 43 SFONCE(); 44 45 if(!f) 46 return -1; 47 48 if(!f->mutex) 49 { if(f->bits&SF_PRIVATE) 50 return 0; 51 52 vtmtxlock(_Sfmutex); 53 f->mutex = vtmtxopen(NIL(Vtmutex_t*), VT_INIT); 54 vtmtxunlock(_Sfmutex); 55 if(!f->mutex) 56 return -1; 57 } 58 59 if(type == SFMTX_LOCK) 60 return vtmtxlock(f->mutex); 61 else if(type == SFMTX_TRYLOCK) 62 return vtmtxtrylock(f->mutex); 63 else if(type == SFMTX_UNLOCK) 64 return vtmtxunlock(f->mutex); 65 else if(type == SFMTX_CLRLOCK) 66 return vtmtxclrlock(f->mutex); 67 else return -1; 68 #endif /*vt_threaded*/ 69 } 70