Functions

Queued_Data.cpp File Reference

#include "tao/Queued_Data.h"
#include "tao/debug.h"
#include "ace/Log_Msg.h"
#include "ace/Malloc_Base.h"
Include dependency graph for Queued_Data.cpp:

Go to the source code of this file.

Functions

static ACE_Message_Blockclone_mb_nocopy_size (ACE_Message_Block *mb, size_t span_size)
 Allocate and return a new empty message block of size span_size mimicking parameters of mb.

Function Documentation

static ACE_Message_Block* clone_mb_nocopy_size ( ACE_Message_Block mb,
size_t  span_size 
) [static]

Allocate and return a new empty message block of size span_size mimicking parameters of mb.

This function allocates a new aligned message block using the same allocators and flags as found in mb. The size of the new message block is at least span_size; the size may be adjusted up in order to accomodate alignment requirements and still fit span_size bytes into the aligned buffer.

Parameters:
mb message block whose parameters should be mimicked
span_size size of the new message block (will be adjusted for proper alignment)
Returns:
an aligned message block with rd_ptr sitting at correct alignment spot, 0 on failure

Definition at line 34 of file Queued_Data.cpp.

{
  // Calculate the required size of the cloned block with alignment
  size_t const aligned_size = ACE_CDR::first_size (span_size + ACE_CDR::MAX_ALIGNMENT);

  // Get the allocators
  ACE_Allocator *data_allocator = 0;
  ACE_Allocator *data_block_allocator = 0;
  ACE_Allocator *message_block_allocator = 0;
  mb->access_allocators (data_allocator,
                         data_block_allocator,
                         message_block_allocator);

  // Create a new Message Block
  ACE_Message_Block *nb = 0;
  ACE_NEW_MALLOC_RETURN (nb,
                         static_cast<ACE_Message_Block*> (
                                         message_block_allocator->malloc (
                                           sizeof (ACE_Message_Block))),
                         ACE_Message_Block(aligned_size,
                                           mb->msg_type(),
                                           mb->cont(),
                                           0, //we want the data block created
                                           data_allocator,
                                           mb->locking_strategy(),
                                           mb->msg_priority(),
                                           mb->msg_execution_time (),
                                           mb->msg_deadline_time (),
                                           data_block_allocator,
                                           message_block_allocator),
                         0);

  ACE_CDR::mb_align (nb);

  // Copy the flags over, but be SURE to clear the DONT_DELETE flag, since
  // we just dynamically allocated the two things.
  nb->set_flags (mb->flags());
  nb->clr_flags (ACE_Message_Block::DONT_DELETE);

  return nb;
}

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines