~jlukas79/+junk/mysql-server

« back to all changes in this revision

Viewing changes to storage/falcon/RecordLeaf.cpp

manual merge 6.0-main --> 6.0-bka-review

Show diffs side-by-side

added added

removed removed

Lines of Context:
122
122
        sync.lock(Shared);
123
123
        
124
124
        // Get a shared lock to find at least one record to scavenge
 
125
        // If scavengeGeneration == UNDEFINED then just count the records in the leaf.
125
126
        
126
127
        for (ptr = records, end = records + RECORD_SLOTS; ptr < end; ++ptr)
127
128
                {
129
130
                
130
131
                if (record)
131
132
                        {
132
 
                        if (record->isVersion())
 
133
                        if (recordScavenge->scavengeGeneration == UNDEFINED)
 
134
                                ++count;
 
135
                        else if (record->isVersion())
133
136
                                {
134
 
                                if ((record->scavenge(recordScavenge)) &&
135
 
                                    ((!record->hasRecord()) || ((record->useCount == 1) && (record->generation <= recordScavenge->scavengeGeneration))))
136
 
                                    break;
 
137
                                Sync syncPrior(record->getSyncPrior(), "RecordLeaf::retireRecords1");
 
138
                                syncPrior.lock(Shared);
 
139
        
 
140
                                if (record->scavenge(recordScavenge, Shared))
 
141
                                        break;
137
142
                                else
138
143
                                        ++count;
139
144
                                }
140
 
                        else if (record->generation <= recordScavenge->scavengeGeneration && record->useCount == 1)
 
145
                        else if (   record->generation <= recordScavenge->scavengeGeneration
 
146
                                 && record->useCount == 1)
141
147
                                break;
142
148
                        else
143
149
                                ++count;
161
167
                        {
162
168
                        if (record->isVersion())
163
169
                                {
164
 
                                if ((record->scavenge(recordScavenge)) &&
165
 
                                    ((!record->hasRecord()) || ((record->useCount == 1) && (record->generation <= recordScavenge->scavengeGeneration))))
 
170
                                Sync syncPrior(record->getSyncPrior(), "RecordLeaf::retireRecords2");
 
171
                                syncPrior.lock(Exclusive);
 
172
                                
 
173
                                if (record->scavenge(recordScavenge, Exclusive))
166
174
                                        {
167
175
                                        *ptr = NULL;
168
176
                                        recordScavenge->spaceReclaimed += record->size;
182
190
                                        ++count;
183
191
                                        }
184
192
                                }
185
 
                        else if (record->generation <= recordScavenge->scavengeGeneration && record->useCount == 1)
 
193
                        else if (   (record->generation <= recordScavenge->scavengeGeneration)
 
194
                                 && (record->useCount == 1))
186
195
                                {
187
196
                                *ptr = NULL;
188
197
                                recordScavenge->spaceReclaimed += record->size;