Skip to content
This repository was archived by the owner on Jul 8, 2022. It is now read-only.

Commit 70aa2b6

Browse files
authored
Fix #484 (#485)
(Tango 9.3.1rc potential crash when an event is pushed at the same time as an event (re)subscription occurs)
1 parent 003074e commit 70aa2b6

File tree

2 files changed

+13
-18
lines changed

2 files changed

+13
-18
lines changed

RELEASE_NOTES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
4. Fix some event compatibility issues with device server <= Tango 8 (#456)
77
5. Fix event field in EventData structure passed to user's callback (broken in Tango 9.3.0 and 9.3.1)
88
6. Fix attribute name in EventData structure passed to user's callback for Attribute Config events
9+
7. Fix a bug occurring when an event is pushed at the same time as an event (re)subscription occurs (#484)
910

1011
9.3.1
1112
=====

cppapi/server/zmqeventsupplier.cpp

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1046,9 +1046,8 @@ void ZmqEventSupplier::push_event(DeviceImpl *device_impl,string event_type,
10461046
string loc_obj_name(obj_name);
10471047
transform(loc_obj_name.begin(), loc_obj_name.end(), loc_obj_name.begin(), ::tolower);
10481048

1049-
create_full_event_name(device_impl, event_type, loc_obj_name, intr_change);
1050-
1051-
ctr_event_name = ctr_event_name + local_event_type;
1049+
event_name = create_full_event_name(device_impl, event_type, loc_obj_name, intr_change);
1050+
ctr_event_name = create_full_event_name(device_impl, local_event_type, loc_obj_name, intr_change);
10521051

10531052
//
10541053
// Create zmq messages
@@ -1568,32 +1567,27 @@ ZmqEventSupplier::create_full_event_name(DeviceImpl *device_impl,
15681567
const string &obj_name_lower,
15691568
bool intr_change)
15701569
{
1571-
event_name = fqdn_prefix;
1570+
string full_event_name = fqdn_prefix;
15721571

1573-
int size = event_name.size();
1574-
if (event_name[size - 1] == '#')
1572+
int size = full_event_name.size();
1573+
if (full_event_name[size - 1] == '#')
15751574
{
1576-
event_name.erase(size - 1);
1575+
full_event_name.erase(size - 1);
15771576
}
15781577

1579-
event_name = event_name + device_impl->get_name_lower();
1578+
full_event_name = full_event_name + device_impl->get_name_lower();
15801579
if (intr_change == false)
15811580
{
1582-
event_name = event_name + '/' + obj_name_lower;
1581+
full_event_name = full_event_name + '/' + obj_name_lower;
15831582
}
15841583
if (Util::_FileDb == true || Util::_UseDb == false)
15851584
{
1586-
event_name = event_name + MODIFIER_DBASE_NO;
1585+
full_event_name = full_event_name + MODIFIER_DBASE_NO;
15871586
}
1588-
event_name = event_name + '.';
1589-
1590-
//this field is in push_event
1591-
//TODO remove this field and replace with full_event_name
1592-
ctr_event_name = event_name;
1593-
1594-
event_name = event_name + event_type;
1587+
full_event_name = full_event_name + '.';
1588+
full_event_name = full_event_name + event_type;
15951589

1596-
return event_name;
1590+
return full_event_name;
15971591
}
15981592

15991593
//+------------------------------------------------------------------------------------------------------------------

0 commit comments

Comments
 (0)