------------------------------------------------------------------------------
| 477 | |
| 478 | //------------------------------------------------------------------------------ |
| 479 | int vtkMultiProcessController::BroadcastProcessRMIs(int vtkNotUsed(reportErrors), int dont_loop) |
| 480 | { |
| 481 | int triggerMessage[128]; |
| 482 | int rmiTag; |
| 483 | int argLength; |
| 484 | unsigned char* arg = nullptr; |
| 485 | int error = RMI_NO_ERROR; |
| 486 | |
| 487 | this->InvokeEvent(vtkCommand::StartEvent); |
| 488 | |
| 489 | do |
| 490 | { |
| 491 | this->RMICommunicator->Broadcast(triggerMessage, 128, 0); |
| 492 | |
| 493 | #ifdef VTK_WORDS_BIGENDIAN |
| 494 | // Header is sent in little-endian form. We need to convert it to big |
| 495 | // endian. |
| 496 | vtkByteSwap::SwapLERange(triggerMessage, 2); |
| 497 | #endif |
| 498 | |
| 499 | rmiTag = triggerMessage[0]; |
| 500 | argLength = triggerMessage[1]; |
| 501 | |
| 502 | if (argLength > 0) |
| 503 | { |
| 504 | arg = new unsigned char[argLength]; |
| 505 | int buffer_size = sizeof(int) * (126 /*128-2*/); |
| 506 | |
| 507 | if (argLength < buffer_size) |
| 508 | { |
| 509 | memcpy(arg, &triggerMessage[2], argLength); |
| 510 | } // END if message is inline |
| 511 | else |
| 512 | { |
| 513 | this->RMICommunicator->Broadcast(arg, argLength, 0); |
| 514 | } // END else message was not inline |
| 515 | |
| 516 | } // END if non-null arguments |
| 517 | |
| 518 | this->ProcessRMI(0 /*we broadcast from rank 0*/, arg, argLength, rmiTag); |
| 519 | |
| 520 | delete[] arg; |
| 521 | arg = nullptr; |
| 522 | |
| 523 | // check for break |
| 524 | if (this->BreakFlag) |
| 525 | { |
| 526 | this->BreakFlag = 0; |
| 527 | this->InvokeEvent(vtkCommand::EndEvent); |
| 528 | return error; |
| 529 | } |
| 530 | |
| 531 | } while (!dont_loop); |
| 532 | |
| 533 | this->InvokeEvent(vtkCommand::EndEvent); |
| 534 | return error; |
| 535 | } |
| 536 |
no test coverage detected