Changeset 1711 in Sophya for trunk/ArchTOIPipe
- Timestamp:
- Oct 19, 2001, 4:00:40 PM (24 years ago)
- Location:
- trunk/ArchTOIPipe/Kernel
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ArchTOIPipe/Kernel/toisegment.cc
r1710 r1711 10 10 static void cout_lock() {pthread_mutex_lock(&cout_mutex);} 11 11 static void cout_unlock() {pthread_mutex_unlock(&cout_mutex);} 12 //#define LOG(_xxx_)13 / / /*12 #define LOG(_xxx_) 13 /* 14 14 #define LOG(_xxx_) \ 15 15 cout_lock(); \ 16 16 _xxx_; \ 17 17 cout_unlock(); 18 //*/18 */ 19 19 20 20 /******************************/ … … 222 222 pthread_mutex_lock(&(master->read_wait_mutex)); 223 223 while (sn0<0 || sn >= sn0 + segmentSize*segments.size()) { 224 wait(); // must be atomic with loop test 224 wait(); // must be atomic with loop test // $CHECK$ est-ce vrai ? 225 225 pthread_mutex_unlock(&(master->read_wait_mutex)); 226 226 LOG(cout << master->name << " BufferView " << hex << this << dec << ": waiting for " << sn << endl) … … 243 243 //pthread_mutex_lock(&(master->read_wait_mutex)); 244 244 waiting = true; 245 master->waitingViews++; 245 246 pthread_cond_wait(&(master->read_wait_condv), &(master->read_wait_mutex)); 246 247 waiting = false; 248 master->waitingViews--; 247 249 //pthread_mutex_unlock(&(master->read_wait_mutex)); 248 250 } … … 252 254 if (sn > firstNeeded) { 253 255 firstNeeded = sn; 256 // C'est peut-etre le moment de faire unl sync, si on est coince par ailleurs... 257 //pthread_mutex_lock(&(master->read_wait_mutex)); 258 if (sn >= sn0 + segmentSize){ // && master->waitingViews>0) { 259 // LOG(cout<<master->name<< " sync on wontneed, waitingViews=" << master->waitingViews << endl); 260 LOG(cout<<master->name<< " sync on wontneed, sn = " << sn << " sn0 = " << sn0 << endl); 261 sync(); 262 } 263 //pthread_mutex_unlock(&(master->read_wait_mutex)); 254 264 } 255 265 } … … 275 285 276 286 waitingOnWrite = false; 287 waitingViews = 0; 277 288 } 278 289 … … 383 394 pthread_mutex_lock(&views_mutex); 384 395 385 int oldBegin = bv->sn0; 386 int oldEnd = bv->sn0 + bv->segmentSize * bv->segments.size(); 396 // int oldBegin = bv->sn0; 397 // int oldEnd = bv->sn0 + bv->segmentSize * bv->segments.size(); 398 int oldBegin = sn0; 399 int oldEnd = sn0 + bv->segmentSize * segments.size(); 387 400 388 401 for (vector<BufferSegment*>::iterator i = bv->segments.begin(); … … 402 415 for (set<BufferView*>::iterator i = allViews.begin(); 403 416 i != allViews.end(); i++) { 417 LOG(cout << name << " View firstneeded " << (*i)->firstNeeded << endl); 404 418 if ((*i)->firstNeeded < firstNeeded) firstNeeded = (*i)->firstNeeded; 405 419 } … … 445 459 } 446 460 447 if ( bv->sn0 > oldBegin) { // nettoyage de fait, reveiller le writer thread si besoin461 if (sn0 > oldBegin) { // nettoyage de fait, reveiller le writer thread si besoin 448 462 signalWrite(); 449 463 } … … 451 465 LOG(cout << name << " sync for " << hex << bv << dec << " : " 452 466 << oldBegin << " - " << oldEnd << " --> " 453 << bv->sn0 << " - " << newEnd << endl);467 << sn0 << " - " << newEnd << endl); 454 468 455 469 if (newEnd > oldEnd) { // Nouveautes, reveiller les reader threads si besoin -
trunk/ArchTOIPipe/Kernel/toisegment.h
r1710 r1711 139 139 140 140 bool waitingOnWrite; // wait on writer thread 141 int waitingViews; 141 142 142 143 set<BufferView*> allViews;
Note:
See TracChangeset
for help on using the changeset viewer.