comparison PrivateQueue.c @ 42:c54f7e0a9d11

fix peek + debug code
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Wed, 06 Mar 2013 14:33:55 +0100
parents 8fcbe46de60a
children 0b3e087a6d37
comparison
equal deleted inserted replaced
24:8b6ec6c1dea5 25:2cdbe37cec11
147 147
148 void **insertPos = Q->insertPos; 148 void **insertPos = Q->insertPos;
149 void **extractPos = Q->extractPos; 149 void **extractPos = Q->extractPos;
150 150
151 //if not empty -- (extract is just below insert when empty) 151 //if not empty -- (extract is just below insert when empty)
152 if( insertPos - extractPos != 1 && 152 if (insertPos - extractPos != 1 &&
153 !(extractPos == endOfData && insertPos == startOfData)) 153 !(extractPos == endOfData && insertPos == startOfData)) { //move before read
154 { 154 if (extractPos == endOfData) //write new pos exactly once, correctly
155 out = *(Q->extractPos + 1); 155 {
156 return out; 156 out = *(startOfData); //can't overrun then fix it 'cause
157 }// other thread might read bad pos
158 else {
159 out = *(Q->extractPos + 1);
160 }
161
162 return out;
157 } 163 }
158 //Q is empty 164 //Q is empty
159 return NULL; 165 return NULL;
160 } 166 }
161 167
162 /*Returns NULL when queue is empty 168 /*Returns NULL when queue is empty
163 */ 169 */
164 void* readPrivQ(PrivQueueStruc* Q) { 170 void* readPrivQ(PrivQueueStruc* Q) {
165 #ifdef DEBUG_PRIVATE_Q
166 Q->numReads++;
167 #endif
168 171
169 void *out = 0; 172 void *out = 0;
170 void **startOfData = Q->startOfData; 173 void **startOfData = Q->startOfData;
171 void **endOfData = Q->endOfData; 174 void **endOfData = Q->endOfData;
172 175
182 }// other thread might read bad pos 185 }// other thread might read bad pos
183 else { 186 else {
184 Q->extractPos++; 187 Q->extractPos++;
185 } 188 }
186 out = *(Q->extractPos); 189 out = *(Q->extractPos);
190 //*(Q->extractPos) = NULL;
191 #ifdef DEBUG_PRIVATE_Q
192 Q->numReads++;
193 #endif
187 return out; 194 return out;
188 } 195 }
189 //Q is empty 196 //Q is empty
190 return NULL; 197 return NULL;
191 } 198 }