|
|
1.1 ! root 1: # include <ingres.h> ! 2: # include <access.h> ! 3: # include <lock.h> ! 4: # include <sccs.h> ! 5: ! 6: SCCSID(@(#)pglocks.c 8.1 12/31/84) ! 7: ! 8: struct lockreq Lock; ! 9: /* ! 10: * setpgl- sets a lock for the access buffer ! 11: */ ! 12: setpgl(buf) ! 13: struct accbuf *buf; ! 14: { ! 15: register struct accbuf *b; ! 16: register int i; ! 17: auto int ret_val; ! 18: ! 19: # ifdef xATR1 ! 20: if ( tTf(28,2) ) ! 21: { ! 22: printf(" setpgl pg=%ld rel", buf->thispage); ! 23: dumptid(&buf->rel_tupid); ! 24: } ! 25: # endif ! 26: if (Alockdes < 0) ! 27: return(1); ! 28: b = buf; ! 29: Lock.lract = A_SLP; /* wait for lock */ ! 30: Lock.lrtype = T_PAGE; /* page lock */ ! 31: Lock.lrmod = M_EXCL; /* exclusive lock */ ! 32: bmove(&b->rel_tupid, Lock.lrel, 4); /* copy relation id */ ! 33: bmove(&b->thispage, Lock.lpage, 4); /* copy page id */ ! 34: i = write(Alockdes, &Lock, KEYSIZE + 3); ! 35: read(Alockdes, &ret_val, sizeof (int)); ! 36: b->bufstatus |= BUF_LOCKED; ! 37: return (ret_val); ! 38: } ! 39: /* ! 40: * unlpg- releases a page lock ! 41: */ ! 42: unlpg(buf) ! 43: struct accbuf *buf; ! 44: { ! 45: register struct accbuf *b; ! 46: register int i; ! 47: auto int ret_val; ! 48: ! 49: # ifdef xATR1 ! 50: if (tTf(28, 3)) ! 51: { ! 52: printf(" unlpg page %ld rel", buf->thispage); ! 53: dumptid(&buf->rel_tupid); ! 54: } ! 55: # endif ! 56: if (Alockdes < 0) ! 57: return(1); ! 58: b = buf; ! 59: Lock.lract = A_RLS1; ! 60: bmove(&b->rel_tupid, Lock.lrel, 4); /* copy relation id */ ! 61: Lock.lrtype = T_PAGE; /* page lock */ ! 62: bmove(&b->thispage, Lock.lpage, 4); /* copy page id */ ! 63: b->bufstatus &= ~BUF_LOCKED; ! 64: i = write(Alockdes, &Lock, KEYSIZE + 3); ! 65: read(Alockdes, &ret_val, sizeof (int)); ! 66: return (ret_val); ! 67: } ! 68: /* ! 69: * unlall - release all locks held by this process ! 70: */ ! 71: unlall() ! 72: { ! 73: register int i; ! 74: auto int ret_val; ! 75: ! 76: ! 77: # ifdef xATR1 ! 78: if (tTf(28, 6)) ! 79: printf(" unlall\n"); ! 80: # endif ! 81: ! 82: Acclock = TRUE; /* reset page lock flag just in case */ ! 83: if (Alockdes < 0) ! 84: return(1); ! 85: Lock.lract = A_RLSA; ! 86: i = write(Alockdes, &Lock, KEYSIZE + 3); ! 87: read(Alockdes, &ret_val, sizeof (int)); ! 88: return (ret_val); ! 89: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.