1/*********************************************************************** 2* * 3* This software is part of the ast package * 4* Copyright (c) 1985-2011 AT&T Intellectual Property * 5* and is licensed under the * 6* Common Public License, Version 1.0 * 7* by AT&T Intellectual Property * 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 31int sfmutex(Sfio_t* f, int type) 32#else 33int sfmutex(f, type) 34Sfio_t* f; 35int 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