|
|
1.1 ! root 1: # include <ingres.h> ! 2: # include <access.h> ! 3: # include <lock.h> ! 4: # include <sccs.h> ! 5: ! 6: SCCSID(@(#)cslocks.c 8.1 12/31/84) ! 7: ! 8: struct lockreq Lock; ! 9: /* ! 10: * setcsl- set a critical section lock ! 11: */ ! 12: setcsl(rtid) ! 13: long rtid; ! 14: { ! 15: register char *r; ! 16: register int i; ! 17: auto int ret_val; /* value returned from the lock driver */ ! 18: ! 19: # ifdef xATR1 ! 20: if ( tTf(28,0) ) ! 21: { ! 22: printf(" setcsl "); ! 23: dumptid(&rtid); ! 24: } ! 25: # endif ! 26: ! 27: if (Alockdes < 0) ! 28: return (1); ! 29: Lock.lract = A_SLP; /* sleep while waiting on lock */ ! 30: Lock.lrtype = T_CS; /* critical section lock */ ! 31: Lock.lrmod = M_EXCL; /* exclusive access */ ! 32: bmove(&rtid, Lock.lrel, 4); /* copy relid */ ! 33: r = Lock.lpage; ! 34: for (i = 0; i < 4; i++) ! 35: /* zero out pageid */ ! 36: *r++ = 0; ! 37: i = write(Alockdes, &Lock, KEYSIZE+3); ! 38: read(Alockdes,&ret_val, sizeof (int)); ! 39: return (ret_val); ! 40: } ! 41: ! 42: ! 43: ! 44: /* ! 45: * unlcs- unlock a critical section ! 46: */ ! 47: unlcs(rtid) ! 48: long rtid; ! 49: { ! 50: register char *r; ! 51: register int i; ! 52: auto int ret_val; ! 53: ! 54: # ifdef xATR1 ! 55: if (tTf(28, 1)) ! 56: { ! 57: printf(" unlcs "); ! 58: dumptid(rtid); ! 59: } ! 60: # endif ! 61: ! 62: if (Alockdes < 0) ! 63: return (1); ! 64: Lock.lract = A_RLS1; ! 65: Lock.lrtype = T_CS; ! 66: bmove(&rtid, Lock.lrel, 4); /* copy relation identifier */ ! 67: r = Lock.lpage; ! 68: for (i = 0; i < 4; i++) ! 69: /* zero out page id */ ! 70: *r++ = 0; ! 71: i = write(Alockdes, &Lock, KEYSIZE + 3); ! 72: read(Alockdes,&ret_val, sizeof (int) ); ! 73: return (ret_val); ! 74: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.