@@ -4017,54 +4017,58 @@ void Attribute::fire_change_event(DevFailed *except)
40174017 bool force_change = false ;
40184018 bool quality_change = false ;
40194019
4020- if ((except != NULL ) ||
4021- (quality == Tango::ATTR_INVALID) ||
4022- ((except == NULL ) && (prev_change_event.err == true )) ||
4023- ((quality != Tango::ATTR_INVALID) &&
4024- (prev_change_event.quality == Tango::ATTR_INVALID)))
4025- {
4026- force_change = true ;
4027- }
4028-
40294020 vector<string> filterable_names;
40304021 vector<double > filterable_data;
40314022 vector<string> filterable_names_lg;
40324023 vector<long > filterable_data_lg;
40334024
4034- if (except != NULL )
4035- {
4036- prev_change_event.err = true ;
4037- prev_change_event.except = *except;
4038- }
4039- else
40404025 {
4041- Tango::AttrQuality the_quality ;
4026+ omni_mutex_lock oml ( EventSupplier::get_event_mutex ()) ;
40424027
4043- if (send_attr_5 != NULL )
4028+ if ((except != NULL ) ||
4029+ (quality == Tango::ATTR_INVALID) ||
4030+ ((except == NULL ) && (prev_change_event.err == true )) ||
4031+ ((quality != Tango::ATTR_INVALID) &&
4032+ (prev_change_event.quality == Tango::ATTR_INVALID)))
40444033 {
4045- the_quality = send_attr_5->quality ;
4046- prev_change_event.value_4 = send_attr_5->value ;
4034+ force_change = true ;
40474035 }
4048- else if (send_attr_4 != NULL )
4036+
4037+ if (except != NULL )
40494038 {
4050- the_quality = send_attr_4-> quality ;
4051- prev_change_event.value_4 = send_attr_4-> value ;
4039+ prev_change_event. err = true ;
4040+ prev_change_event.except = *except ;
40524041 }
40534042 else
40544043 {
4055- the_quality = send_attr->quality ;
4056- prev_change_event.value = send_attr->value ;
4057- }
4044+ Tango::AttrQuality the_quality;
40584045
4059- if (prev_change_event.quality != the_quality)
4060- {
4061- quality_change = true ;
4062- }
4046+ if (send_attr_5 != NULL )
4047+ {
4048+ the_quality = send_attr_5->quality ;
4049+ prev_change_event.value_4 = send_attr_5->value ;
4050+ }
4051+ else if (send_attr_4 != NULL )
4052+ {
4053+ the_quality = send_attr_4->quality ;
4054+ prev_change_event.value_4 = send_attr_4->value ;
4055+ }
4056+ else
4057+ {
4058+ the_quality = send_attr->quality ;
4059+ prev_change_event.value = send_attr->value ;
4060+ }
4061+
4062+ if (prev_change_event.quality != the_quality)
4063+ {
4064+ quality_change = true ;
4065+ }
40634066
4064- prev_change_event.quality = the_quality;
4065- prev_change_event.err = false ;
4067+ prev_change_event.quality = the_quality;
4068+ prev_change_event.err = false ;
4069+ }
4070+ prev_change_event.inited = true ;
40664071 }
4067- prev_change_event.inited = true ;
40684072
40694073 filterable_names.push_back (" forced_event" );
40704074 if (force_change == true )
@@ -4478,40 +4482,44 @@ void Attribute::fire_archive_event(DevFailed *except)
44784482 vector<string> filterable_names_lg;
44794483 vector<long > filterable_data_lg;
44804484
4481- if (except != NULL )
44824485 {
4483- prev_archive_event.err = true ;
4484- prev_archive_event.except = *except;
4485- }
4486- else
4487- {
4488- Tango::AttrQuality the_quality;
4486+ omni_mutex_lock oml (EventSupplier::get_event_mutex ());
44894487
4490- if (send_attr_5 != Tango_nullptr)
4491- {
4492- prev_archive_event.value_4 = send_attr_5->value ;
4493- the_quality = send_attr_5->quality ;
4494- }
4495- else if (send_attr_4 != Tango_nullptr)
4488+ if (except != NULL )
44964489 {
4497- prev_archive_event.value_4 = send_attr_4-> value ;
4498- the_quality = send_attr_4-> quality ;
4490+ prev_archive_event.err = true ;
4491+ prev_archive_event. except = *except ;
44994492 }
45004493 else
45014494 {
4502- prev_archive_event.value = send_attr->value ;
4503- the_quality = send_attr->quality ;
4504- }
4495+ Tango::AttrQuality the_quality;
45054496
4506- if (prev_archive_event.quality != the_quality)
4507- {
4508- quality_change = true ;
4509- }
4497+ if (send_attr_5 != Tango_nullptr)
4498+ {
4499+ prev_archive_event.value_4 = send_attr_5->value ;
4500+ the_quality = send_attr_5->quality ;
4501+ }
4502+ else if (send_attr_4 != Tango_nullptr)
4503+ {
4504+ prev_archive_event.value_4 = send_attr_4->value ;
4505+ the_quality = send_attr_4->quality ;
4506+ }
4507+ else
4508+ {
4509+ prev_archive_event.value = send_attr->value ;
4510+ the_quality = send_attr->quality ;
4511+ }
45104512
4511- prev_archive_event.quality = the_quality;
4512- prev_archive_event.err = false ;
4513+ if (prev_archive_event.quality != the_quality)
4514+ {
4515+ quality_change = true ;
4516+ }
4517+
4518+ prev_archive_event.quality = the_quality;
4519+ prev_archive_event.err = false ;
4520+ }
4521+ prev_archive_event.inited = true ;
45134522 }
4514- prev_archive_event.inited = true ;
45154523
45164524 filterable_names.push_back (" forced_event" );
45174525 if (force_change == true )
0 commit comments