Postpone reader detection to the write call and skip writing if there is no reader yet.
This commit is contained in:
parent
c0205f7eb2
commit
b6c80f2e6a
@ -116,19 +116,6 @@ SG_DDS::open( SGProtocolDir direction )
|
|||||||
<< dds_strretcode(-rc));
|
<< dds_strretcode(-rc));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t status = 0;
|
|
||||||
while(!(status & DDS_PUBLICATION_MATCHED_STATUS))
|
|
||||||
{
|
|
||||||
rc = dds_get_status_changes(writer, &status);
|
|
||||||
if (rc != DDS_RETCODE_OK) {
|
|
||||||
SG_LOG(SG_IO, SG_ALERT, "dds_get_status_changes: "
|
|
||||||
<< dds_strretcode(-rc));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Polling sleep. */
|
|
||||||
dds_sleepfor(DDS_MSECS(20));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -170,6 +157,19 @@ SG_DDS::write( const char *buf, const int length )
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dds_return_t rc;
|
||||||
|
uint32_t status = 0;
|
||||||
|
rc = dds_get_status_changes(writer, &status);
|
||||||
|
if (rc != DDS_RETCODE_OK) {
|
||||||
|
SG_LOG(SG_IO, SG_ALERT, "dds_get_status_changes: "
|
||||||
|
<< dds_strretcode(-rc));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!(status & DDS_PUBLICATION_MATCHED_STATUS)) {
|
||||||
|
SG_LOG(SG_IO, SG_INFO, "DDS skipping write: no readers.");
|
||||||
|
return length; // no readers yet.
|
||||||
|
}
|
||||||
|
|
||||||
result = dds_write(writer, buf);
|
result = dds_write(writer, buf);
|
||||||
if(result != DDS_RETCODE_OK)
|
if(result != DDS_RETCODE_OK)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user