MCPcopy Create free account
hub / github.com/Kitware/VTK / BroadcastProcessRMIs

Method BroadcastProcessRMIs

Parallel/Core/vtkMultiProcessController.cxx:479–535  ·  view source on GitHub ↗

------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

477
478//------------------------------------------------------------------------------
479int 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

Callers 1

ProcessRMIsMethod · 0.95

Calls 3

ProcessRMIMethod · 0.95
InvokeEventMethod · 0.80
BroadcastMethod · 0.45

Tested by

no test coverage detected