MCPcopy Create free account
hub / github.com/OpenDDS/OpenDDS / write

Method write

dds/DCPS/DataWriterImpl.cpp:1864–1970  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1862}
1863
1864DDS::ReturnCode_t
1865DataWriterImpl::write(Message_Block_Ptr data,
1866 DDS::InstanceHandle_t handle,
1867 const DDS::Time_t& source_timestamp,
1868 GUIDSeq* filter_out,
1869 const void* real_data)
1870{
1871 DBG_ENTRY_LVL("DataWriterImpl","write",6);
1872
1873 ACE_Guard<ACE_Recursive_Thread_Mutex> guard(lock_);
1874
1875 // take ownership of sequence allocated in FooDWImpl::write_w_timestamp()
1876 GUIDSeq_var filter_out_var(filter_out);
1877
1878 if (!enabled_) {
1879 ACE_ERROR_RETURN((LM_ERROR,
1880 ACE_TEXT("(%P|%t) ERROR: DataWriterImpl::write: ")
1881 ACE_TEXT("Entity is not enabled.\n")),
1882 DDS::RETCODE_NOT_ENABLED);
1883 }
1884
1885 ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex,
1886 dc_guard,
1887 get_lock(),
1888 DDS::RETCODE_ERROR);
1889
1890 DataSampleElement* element = 0;
1891 DDS::ReturnCode_t ret = this->data_container_->obtain_buffer(element, handle);
1892
1893 if (ret == DDS::RETCODE_TIMEOUT) {
1894 return ret; // silent for timeout
1895
1896 } else if (ret != DDS::RETCODE_OK) {
1897 ACE_ERROR_RETURN((LM_ERROR,
1898 ACE_TEXT("(%P|%t) ERROR: ")
1899 ACE_TEXT("DataWriterImpl::write: ")
1900 ACE_TEXT("obtain_buffer returned %d.\n"),
1901 ret),
1902 ret);
1903 }
1904
1905 Message_Block_Ptr temp;
1906 ret = create_sample_data_message(OPENDDS_MOVE_NS::move(data),
1907 handle,
1908 element->get_header(),
1909 temp,
1910 source_timestamp,
1911 (filter_out != 0));
1912 element->set_sample(OPENDDS_MOVE_NS::move(temp));
1913
1914 if (ret != DDS::RETCODE_OK) {
1915 data_container_->release_buffer(element);
1916 return ret;
1917 }
1918
1919 element->set_filter_out(filter_out_var._retn()); // ownership passed to element
1920
1921 ret = this->data_container_->enqueue(element, handle);

Callers

nothing calls this directly

Calls 15

get_lockFunction · 0.85
moveFunction · 0.85
obtain_bufferMethod · 0.80
release_bufferMethod · 0.80
get_unsent_dataMethod · 0.80
is_suspendedMethod · 0.80
enqueue_tailMethod · 0.80
instance_stateMethod · 0.80
on_sample_sentMethod · 0.80
get_value_dispatcherFunction · 0.70
_retnMethod · 0.45
enqueueMethod · 0.45

Tested by

no test coverage detected