[Tango-cs-bug-info] [tango-cs:bugs] #676 ZMQ Events: notifications are blocked after a while

0 views
Skip to first unread message

tango-cs...@lists.sourceforge.net

unread,
Oct 7, 2015, 2:50:18 AM10/7/15
to Tango-cs...@lists.sf.net
  • status: open --> closed-fixed
  • Comment:

Fixed in Tango 9


[bugs:#676] ZMQ Events: notifications are blocked after a while

Status: closed-fixed
Created: Fri Jul 04, 2014 10:07 AM UTC by Laurent Oddoux
Last Updated: Thu Feb 26, 2015 08:56 AM UTC
Owner: nobody

A client subscribes on CHANGE_EVENT for some attributes of TangoTest Device.
The notifications are received correctly for a while and then the reception is bloqued during the unmarshalling of the data (consumming 100% of CPU). This problem occurs always but after a various time (2-3 minutes to some hours).
The problem seems to occur only when the client subscribes to an image or a spectrum.
The problem occurs in Tango 8.1.2. The problem also occurs in Tango 8.1.2 with patchs (p812_1, p812_2, p812_3 and p812_4) and ZMQ 3.2.2 or 3.2.4. The client is installed on Win7 x64. The server is installed on Win7 x64.

The stack trace is always the same (the data of event_data seems wrong):
- tango812d.dll!operator<<=(unsigned long & a=3435973836, cdrStream & s={...}) Ligne 1027 + 0x51 octets C++
- tango812d.dll!operator<<=(Tango::AttrQuality & _e=ATTR_VALID, cdrStream & s={...}) Ligne 5744 C++
- tango812d.dll!Tango::ZmqAttributeValue_4::operator<<=(Tango::TangoCdrMemoryStream & _n={...}) Ligne 2830 C++
- tango812d.dll!Tango::ZmqEventConsumer::push_zmq_event(std::basic_string<char,std::char_traits<char>,std::allocator<char> > & ev_name="tango://...:20000/sys/tg_test/1/ulong_image_ro.change", unsigned char endian=' ', zmq::message_t & event_data={...}, bool error=false, const unsigned long & ds_ctr=1562) Ligne 2191 C++
- tango812d.dll!Tango::ZmqEventConsumer::process_event(zmq::message_t & received_event_name={...}, zmq::message_t & received_endian={...}, zmq::message_t & received_call={...}, zmq::message_t & event_data={...}) Ligne 579 + 0x47 octets C++
- tango812d.dll!Tango::ZmqEventConsumer::run_undetached(void * arg=0x000000000034c6c0) Ligne 310 + 0x3b octets C++

The folowing code is used to reproduce the problem (the polling period is 1s, we have also tried to increase HWM):

Tango::DeviceProxy* l_pDeviceProxy = new Tango::DeviceProxy("tango://...:20000/sys/tg_test/1");
l_pDeviceProxy->ping();
MyCallback* l_pAttrCallback = new MyCallback(); 
vector<std::string> filter;
l_pDeviceProxy->subscribe_event("state", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("boolean_scalar", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("boolean_image_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("boolean_scalar", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("boolean_spectrum", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("boolean_spectrum_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("double_image", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("double_image_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("double_scalar", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("double_scalar_rww", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("double_scalar_w", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("double_spectrum", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("double_spectrum_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("float_image", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("float_image_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("float_scalar", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("float_spectrum", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("float_spectrum_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("long64_image_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("long64_scalar", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("long64_spectrum_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("long_image", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("long_image_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("long_scalar", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("long_scalar_rww", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("long_scalar_w", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("long_spectrum", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("long_spectrum_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("short_image", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("short_image_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("short_scalar", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("short_scalar_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("short_scalar_rww", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("short_scalar_w", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("short_spectrum", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("short_spectrum_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("Status", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("string_scalar", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("uchar_image", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("uchar_image_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("uchar_scalar", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("uchar_spectrum", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("uchar_spectrum_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("ulong64_image_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("ulong64_scalar", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("ulong64_spectrum_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("ulong_image_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("ulong_scalar", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("ulong_spectrum_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("ushort_image", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("ushort_image_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("ushort_scalar", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("ushort_spectrum", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);
l_pDeviceProxy->subscribe_event("ushort_spectrum_ro", Tango::CHANGE_EVENT, l_pAttrCallback, filter, true);

Sent from sourceforge.net because Tango-cs...@lists.sf.net is subscribed to https://sourceforge.net/p/tango-cs/bugs/

To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/tango-cs/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list.

message-footer.txt
Reply all
Reply to author
Forward
0 new messages