Hello Stefan,

I just tried your patch below and found it fixed my previous problem with 
segfaults when the modbus module was enabled. This was with collectd 
5.0.2/libmodbus 3.0.1 on i386. Thankyou!

I am though now seeing a slightly odd situation where after a period of time 
all data points that are collected via the modbus module are reported as zero.  
 Other collectd modules are still collecting correctly. A restart of collectd 
fixes the problem for awhile, but then it occurs again. I don't think it's a 
connectivity to the modbus device issue as it occurs after a few hours.

Using 'rrdtool dump' I can see the logged values for the time periods and 
<last_ds> both reported as zero.  


I need to recompile with debugging enabled to see if I can track down the 
problem but I was wondering if you had seen anything similar?


Cheers,

Matt


> Hi all,
> 
> I also stumbled across the modbus segfault (collectd 5.0.1 / libmodbus 3.0.1 
> / gentoo, both i386 & x86_64).
> 
> The problem is that host->connection is simply never initialized in 
> mb_read_data() before being passed to libmodbus.
> The only place mb_init_connection() is called is from within the reconnection 
> loop below.
> 
> Adding this before the call to modbus_set_slave() makes the crash go away:
> 
>   if (host->connection == NULL)
>   {
>     status = mb_init_connection (host);
>     if (status != 0)
>     {
>       ERROR ("Modbus plugin: mb_init_connection (%s/%s) failed. ",
>           host->host, host->node);
>       return (-1);
>     }
>   }
> 
> As I'm reading float values I also had to modify mb_register_to_float() to 
> get what I was expecting.
> But not sure whether this is due to running on a 64bit machine or just my PLC 
> being backwards.
> What I'm doing is
> 
> static float mb_register_to_float (uint16_t hi, uint16_t lo) /* {{{ */
> {
>   union
>   {
>     uint8_t b[4];
>     uint16_t s[2];
>     float f;
>   } conv;
> 
> #if BYTE_ORDER == LITTLE_ENDIAN
>   conv.s[0] = hi;
>   conv.s[1] = lo;
> #else
> ...
> 
> -- 
> Cheers, Stefan
> _______________________________________________
> collectd mailing list
> collectd@verplant.org
> http://mailman.verplant.org/listinfo/collectd


_______________________________________________
collectd mailing list
collectd@verplant.org
http://mailman.verplant.org/listinfo/collectd

Reply via email to