Changeset 1757 for XIOS/dev/dev_ym/XIOS_ONE_SIDED/src/node/context.cpp
- Timestamp:
- 10/18/19 14:55:57 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_ONE_SIDED/src/node/context.cpp
r1639 r1757 429 429 { 430 430 client->checkBuffers(); 431 bool hasTmpBufferedEvent = client->hasTemporarilyBufferedEvent(); 432 if (hasTmpBufferedEvent) 433 hasTmpBufferedEvent = !client->sendTemporarilyBufferedEvent(); 434 // Don't process events if there is a temporarily buffered event 435 return server->eventLoop(!hasTmpBufferedEvent || !enableEventsProcessing); 431 return server->eventLoop(true); 436 432 } 437 433 else if (CServer::serverLevel == 1) 438 434 { 439 if (!finalized) 440 client->checkBuffers(); 435 if (!finalized) client->checkBuffers(); 441 436 bool serverFinished = true; 442 if (!finalized) 443 serverFinished = server->eventLoop(enableEventsProcessing); 437 if (!finalized) serverFinished = server->eventLoop(enableEventsProcessing); 444 438 bool serverPrimFinished = true; 445 439 for (int i = 0; i < clientPrimServer.size(); ++i) 446 440 { 447 if (!finalized) 448 clientPrimServer[i]->checkBuffers(); 449 if (!finalized) 450 serverPrimFinished *= serverPrimServer[i]->eventLoop(enableEventsProcessing); 441 if (!finalized) clientPrimServer[i]->checkBuffers(); 442 if (!finalized) serverPrimFinished *= serverPrimServer[i]->eventLoop(enableEventsProcessing); 451 443 } 452 444 return ( serverFinished && serverPrimFinished); … … 484 476 ++countChildCtx_; 485 477 478 info(100)<<"DEBUG: context "<<getId()<<" Send client finalize"<<endl ; 486 479 client->finalize(); 487 while (client->havePendingRequests()) 488 client->checkBuffers(); 489 480 info(100)<<"DEBUG: context "<<getId()<<" Client finalize sent"<<endl ; 481 while (client->havePendingRequests()) client->checkBuffers(); 482 483 info(100)<<"DEBUG: context "<<getId()<<" no pending request ok"<<endl ; 490 484 while (!server->hasFinished()) 491 485 server->eventLoop(); 486 info(100)<<"DEBUG: context "<<getId()<<" server has finished"<<endl ; 487 488 bool notifiedFinalized=false ; 489 do 490 { 491 notifiedFinalized=client->isNotifiedFinalized() ; 492 } while (!notifiedFinalized) ; 493 client->releaseBuffers(); 492 494 493 495 if (hasServer) // Mode attache … … 499 501 500 502 //! Deallocate client buffers 501 client->releaseBuffers();502 503 // client->releaseBuffers(); 504 info(100)<<"DEBUG: context "<<getId()<<" release client ok"<<endl ; 503 505 //! Free internally allocated communicators 504 506 for (std::list<MPI_Comm>::iterator it = comms.begin(); it != comms.end(); ++it) … … 515 517 if (countChildCtx_ == 0) 516 518 for (int i = 0; i < clientPrimServer.size(); ++i) 519 { 517 520 clientPrimServer[i]->finalize(); 521 bool bufferReleased; 522 do 523 { 524 clientPrimServer[i]->checkBuffers(); 525 bufferReleased = !clientPrimServer[i]->havePendingRequests(); 526 } while (!bufferReleased); 527 528 bool notifiedFinalized=false ; 529 do 530 { 531 // clientPrimServer[i]->checkBuffers(); 532 notifiedFinalized=clientPrimServer[i]->isNotifiedFinalized() ; 533 } while (!notifiedFinalized) ; 534 clientPrimServer[i]->releaseBuffers(); 535 } 536 518 537 519 538 // (Last) context finalized message received … … 521 540 { 522 541 // Blocking send of context finalize message to its client (e.g. primary server or model) 523 info(100)<<"DEBUG: context "<<getId()<<" Send client finalize <<"<<endl ;542 info(100)<<"DEBUG: context "<<getId()<<" Send client finalize"<<endl ; 524 543 client->finalize(); 544 info(100)<<"DEBUG: context "<<getId()<<" Client finalize sent"<<endl ; 525 545 bool bufferReleased; 526 546 do … … 529 549 bufferReleased = !client->havePendingRequests(); 530 550 } while (!bufferReleased); 551 552 bool notifiedFinalized=false ; 553 do 554 { 555 // client->checkBuffers(); 556 notifiedFinalized=client->isNotifiedFinalized() ; 557 } while (!notifiedFinalized) ; 558 client->releaseBuffers(); 559 531 560 finalized = true; 532 561 info(100)<<"DEBUG: context "<<getId()<<" bufferRelease OK"<<endl ; 562 533 563 closeAllFile(); // Just move to here to make sure that server-level 1 can close files 534 564 if (hasServer && !hasClient) … … 539 569 540 570 //! Deallocate client buffers 541 client->releaseBuffers(); 571 // client->releaseBuffers(); 572 info(100)<<"DEBUG: context "<<getId()<<" client release"<<endl ; 573 574 /* 542 575 for (int i = 0; i < clientPrimServer.size(); ++i) 543 576 clientPrimServer[i]->releaseBuffers(); 544 577 */ 545 578 //! Free internally allocated communicators 546 579 for (std::list<MPI_Comm>::iterator it = comms.begin(); it != comms.end(); ++it)
Note: See TracChangeset
for help on using the changeset viewer.