| 1862 | } |
| 1863 | |
| 1864 | DDS::ReturnCode_t |
| 1865 | DataWriterImpl::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); |
nothing calls this directly
no test coverage detected