File tree Expand file tree Collapse file tree 4 files changed +24
-11
lines changed Expand file tree Collapse file tree 4 files changed +24
-11
lines changed Original file line number Diff line number Diff line change @@ -202,6 +202,8 @@ class UnirecBidirectionalInterface {
202202 uint64_t m_sequenceNumber;
203203 const void * m_prioritizedDataPointer;
204204 bool m_sendEoFonExit;
205+ bool m_isInitialized;
206+
205207 UnirecRecord m_unirecRecord;
206208
207209 friend class Unirec ;
Original file line number Diff line number Diff line change @@ -137,6 +137,7 @@ class UnirecOutputInterface {
137137 ur_template_t * m_template = nullptr ;
138138 uint8_t m_interfaceID;
139139 bool m_sendEoFonExit;
140+ bool m_isInitialized;
140141 UnirecRecord m_unirecRecord;
141142
142143 friend class Unirec ;
Original file line number Diff line number Diff line change 1313
1414namespace Nemea {
1515
16- UnirecBidirectionalInterface::~UnirecBidirectionalInterface ()
17- {
18- if (m_sendEoFonExit) {
19- sendEoF ();
20- }
21-
22- ur_free_template (m_template);
23- }
24-
2516UnirecBidirectionalInterface::UnirecBidirectionalInterface (
2617 uint8_t inputInterfaceID,
2718 uint8_t outputInterfaceID)
@@ -31,10 +22,20 @@ UnirecBidirectionalInterface::UnirecBidirectionalInterface(
3122 , m_sequenceNumber(0 )
3223 , m_prioritizedDataPointer(nullptr )
3324 , m_sendEoFonExit(true )
25+ , m_isInitialized(false )
3426{
3527 setRequieredFormat (" " );
3628}
3729
30+ UnirecBidirectionalInterface::~UnirecBidirectionalInterface ()
31+ {
32+ if (m_sendEoFonExit && m_isInitialized) {
33+ sendEoF ();
34+ }
35+
36+ ur_free_template (m_template);
37+ }
38+
3839std::optional<UnirecRecordView> UnirecBidirectionalInterface::receive ()
3940{
4041 const void * receivedData;
@@ -95,6 +96,10 @@ void UnirecBidirectionalInterface::setRequieredFormat(const std::string& templat
9596 " format." );
9697 }
9798
99+ if (templateSpecification.empty ()) {
100+ return ;
101+ }
102+
98103 changeInternalTemplate (templateSpecification);
99104}
100105
@@ -120,6 +125,8 @@ void UnirecBidirectionalInterface::changeInternalTemplate(const std::string& tem
120125 }
121126
122127 m_unirecRecord = createUnirecRecord ();
128+
129+ m_isInitialized = true ;
123130}
124131
125132void UnirecBidirectionalInterface::changeTemplate ()
Original file line number Diff line number Diff line change @@ -17,12 +17,13 @@ UnirecOutputInterface::UnirecOutputInterface(uint8_t interfaceID)
1717 : m_template(nullptr )
1818 , m_interfaceID(interfaceID)
1919 , m_sendEoFonExit(true )
20+ , m_isInitialized(false )
2021{
2122}
2223
2324UnirecOutputInterface::~UnirecOutputInterface ()
2425{
25- if (m_sendEoFonExit) {
26+ if (m_sendEoFonExit && m_isInitialized ) {
2627 sendEoF ();
2728 }
2829
@@ -88,7 +89,7 @@ void UnirecOutputInterface::setAutoflushTimeout(int timeout)
8889
8990void UnirecOutputInterface::sendEoF () const
9091{
91- char dummy[1 ] = {0 };
92+ char dummy[1 ] = { 0 };
9293 trap_send (m_interfaceID, dummy, sizeof (dummy));
9394}
9495
@@ -116,6 +117,8 @@ void UnirecOutputInterface::changeTemplate(const std::string& templateFields)
116117 " created." );
117118 }
118119 m_unirecRecord = createUnirecRecord ();
120+
121+ m_isInitialized = true ;
119122}
120123
121124UnirecRecord UnirecOutputInterface::createUnirecRecord (size_t maxVariableFieldsSize)
You can’t perform that action at this time.
0 commit comments