43 if (n == SEG->scb[SEG->cur].n)
48 if (SEG->load_idx[n] >= 0) {
49 cur = SEG->load_idx[n];
51 if (SEG->scb[cur].age != SEG->youngest) {
53 SEG->scb[cur].age->younger->older = SEG->scb[cur].age->older;
54 SEG->scb[cur].age->older->younger = SEG->scb[cur].age->younger;
56 SEG->scb[cur].age->younger = SEG->youngest->younger;
57 SEG->scb[cur].age->older = SEG->youngest;
58 SEG->scb[cur].age->older->younger = SEG->scb[cur].age;
59 SEG->scb[cur].age->younger->older = SEG->scb[cur].age;
61 SEG->youngest = SEG->scb[cur].age;
64 return SEG->cur = cur;
68 if (!SEG->nfreeslots) {
70 SEG->oldest = SEG->oldest->younger;
71 cur = SEG->oldest->cur;
72 SEG->oldest->cur = -1;
75 if (SEG->scb[cur].n >= 0) {
76 SEG->load_idx[SEG->scb[cur].n] = -1;
79 if (SEG->scb[cur].dirty) {
87 cur = SEG->freeslot[--SEG->nfreeslots];
92 SEG->scb[cur].dirty = 0;
93 if (SEG->seek(SEG, SEG->scb[cur].n, 0) == -1) {
95 G_warning(_(
"File read/write operation failed: %s (%d)"), strerror(
err),
100 read_result = read(SEG->fd, SEG->scb[cur].buf, SEG->size);
102 if (read_result == 0) {
106 G_debug(1,
"Segment pagein: zero read");
107 memset(SEG->scb[cur].buf, 0, SEG->size);
109 else if (read_result != SEG->size) {
110 G_debug(2,
"Segment pagein: read_result=%d SEG->size=%d", read_result,
114 G_warning(
"Segment pagein: %s", strerror(errno));
116 G_warning(
"Segment pagein: short count during read(), got %d, "
118 read_result, SEG->size);
124 SEG->load_idx[n] = cur;
127 SEG->youngest = SEG->youngest->younger;
128 SEG->scb[cur].age = SEG->youngest;
129 SEG->youngest->cur = cur;
131 return SEG->cur = cur;
int seg_pagein(SEGMENT *SEG, int n)
Internal use only.
int seg_pageout(SEGMENT *SEG, int i)
Internal use only.