@@ -861,7 +861,7 @@ void DServer::restart(string &d_name)
861861
862862 vector<PollObj *> &p_obj = dev_to_del->get_poll_obj_list ();
863863 vector<Pol> dev_pol;
864- vector<EventPar > eve;
864+ vector<EventSubscriptionState > eve;
865865
866866 for (i = 0 ;i < p_obj.size ();i++)
867867 {
@@ -1098,6 +1098,16 @@ void DServer::restart(string &d_name)
10981098 event_supplier_zmq->push_dev_intr_change_event (new_dev,false ,cmds_list,atts_list);
10991099 }
11001100 }
1101+
1102+ // Attribute properties may have changed after the restart.
1103+ // Push an attribute configuration event to all registered subscribers.
1104+
1105+ vector<Tango::Attribute*>& dev_att_list = new_dev->get_device_attr ()->get_attribute_list ();
1106+ vector<Tango::Attribute*>::iterator ite_att;
1107+ for (ite_att = dev_att_list.begin (); ite_att != dev_att_list.end () ; ++ite_att)
1108+ {
1109+ new_dev->push_att_conf_event (*ite_att);
1110+ }
11011111}
11021112
11031113// +-----------------------------------------------------------------------------------------------------------------
@@ -1172,7 +1182,7 @@ void ServRestartThread::run(void *ptr)
11721182// Memorize event parameters and devices interface
11731183//
11741184
1175- map<string,vector<EventPar > > map_events;
1185+ map<string,vector<EventSubscriptionState > > map_events;
11761186 map<string,DevIntr> map_dev_inter;
11771187
11781188 dev->mem_event_par (map_events);
@@ -1204,22 +1214,22 @@ void ServRestartThread::run(void *ptr)
12041214 dev->set_poll_th_pool_size (DEFAULT_POLLING_THREADS_POOL_SIZE);
12051215
12061216 tg->set_svr_starting (true );
1207-
1217+
12081218 vector<DeviceClass *> empty_class;
12091219 tg->set_class_list (&empty_class);
1210-
1220+
12111221 {
12121222 AutoPyLock PyLo;
12131223 dev->init_device ();
12141224 }
1215-
1225+
12161226//
12171227// Set the class list pointer in the Util class and add the DServer object class
12181228//
12191229
12201230 tg->set_class_list (&(dev->get_class_list ()));
12211231 tg->add_class_to_list (dev->get_device_class ());
1222-
1232+
12231233 tg->set_svr_starting (false );
12241234
12251235//
@@ -1975,6 +1985,25 @@ void DServer::mem_event_par(map<string,vector<EventPar> > &_map)
19751985 }
19761986}
19771987
1988+ void DServer::mem_event_par (map<string,vector<EventSubscriptionState> > &_map)
1989+ {
1990+ for (size_t i = 0 ;i < class_list.size ();i++)
1991+ {
1992+ vector<DeviceImpl *> &dev_list = class_list[i]->get_device_list ();
1993+ for (size_t j = 0 ;j < dev_list.size ();j++)
1994+ {
1995+ vector<EventSubscriptionState> eve;
1996+ dev_list[j]->get_device_attr ()->get_event_param (eve);
1997+ dev_list[j]->get_event_param (eve);
1998+
1999+ if (eve.size () != 0 )
2000+ {
2001+ _map.insert (make_pair (dev_list[j]->get_name (),eve));
2002+ }
2003+ }
2004+ }
2005+ }
2006+
19782007// +-----------------------------------------------------------------------------------------------------------------
19792008//
19802009// method :
@@ -2009,6 +2038,26 @@ void DServer::apply_event_par(map<string,vector<EventPar> > &_map)
20092038 }
20102039}
20112040
2041+ void DServer::apply_event_par (map<string,vector<EventSubscriptionState> > &_map)
2042+ {
2043+ for (size_t i = 0 ;i < class_list.size ();i++)
2044+ {
2045+ vector<DeviceImpl *> &dev_list = class_list[i]->get_device_list ();
2046+ for (size_t j = 0 ;j < dev_list.size ();j++)
2047+ {
2048+ string &dev_name = dev_list[j]->get_name ();
2049+ map<string,vector<EventSubscriptionState> >::iterator ite;
2050+ ite = _map.find (dev_name);
2051+
2052+ if (ite != _map.end ())
2053+ {
2054+ dev_list[j]->get_device_attr ()->set_event_param (ite->second );
2055+ dev_list[j]->set_event_param (ite->second );
2056+ }
2057+ }
2058+ }
2059+ }
2060+
20122061// +-----------------------------------------------------------------------------------------------------------------
20132062//
20142063// method :
0 commit comments