|
|
1.1 ! root 1: /* mark.c - _mkinit, mark */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <mark.h> ! 6: ! 7: #ifdef MEMMARK ! 8: int *marks[MAXMARK]; ! 9: int nmarks; ! 10: int mkmutex; ! 11: ! 12: /*------------------------------------------------------------------------ ! 13: * _mkinit -- called once at system startup ! 14: *------------------------------------------------------------------------ ! 15: */ ! 16: _mkinit() ! 17: { ! 18: mkmutex = screate(1); ! 19: nmarks = 0; ! 20: } ! 21: ! 22: ! 23: ! 24: /*------------------------------------------------------------------------ ! 25: * mark -- mark a location if it hasn't been marked ! 26: *------------------------------------------------------------------------ ! 27: */ ! 28: SYSCALL mark(loc) ! 29: int *loc; ! 30: { ! 31: if ( *loc>=0 && *loc<nmarks && marks[*loc]==loc ) ! 32: return(0); ! 33: if (nmarks>=MAXMARK) ! 34: return(SYSERR); ! 35: wait(mkmutex); ! 36: marks[ (*loc) = nmarks++] = loc; ! 37: signal(mkmutex); ! 38: return(OK); ! 39: } ! 40: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.