[Nut-upsuser] upds crash with 'Out of memory'
Ryan Sizemore
ryan.sizemore at gmail.com
Wed Jan 28 07:29:16 UTC 2015
On Tue, Jan 27, 2015 at 5:53 AM, Charles Lepple <clepple at gmail.com> wrote:
> On Jan 24, 2015, at 12:45 AM, Ryan Sizemore <ryan.sizemore at gmail.com>
> wrote:
>
> Hello,
>
> I am trying to get nut running on a Windows 2012 R2 server (x64). I am
> using the MSI release of 2.6.5-3.
>
>
> I am not sure why they are not listed on the main download page, but there
> are actually three Windows MSI releases after that:
>
> http://www.networkupstools.org/package/windows/
>
I see. I will try an updated build.
> I mention this because there is a memory allocation fix that was released
> after your version:
>
>
> https://github.com/networkupstools/nut/commit/a07ff33854bd128115f1d63929f390c982ff410b
>
> although I suspect it might not be related.
>
The filter_path function looks to be only used for argument parsing, so
yes, it probably isn't related to the issue I am seeing.
>
> That being said, the Windows port has not been maintained for a year or
> two. (This was being developed by Eaton employees, but Eaton is no longer
> supporting the NUT project.)
>
> The attached UPS is an APC xs1500 (model bx1500g). The connection is an
> RJ45 to USB cable.
>
> Here is my ups.conf:
> [xs1500]
> driver = usbhid-ups
> port = auto
> desc = "APC Back-UPS xs1500"
>
> The problem I am encountering is upsd crashing with an 'Out of memory'
> error. I can start usbhid-ups.exe and it will correctly dump variables from
> the UPS, so communication with the UPS itself seems to work. However, when
> I try to run 'upsc xs1500', I get the following output from upsd (running
> with debugging output):
>
> C:\Program Files (x86)\NUT\sbin>upsd -DDDDD
> Network UPS Tools upsd 2.6.5-3723:3731M
> 0.000000 listen_add: added ::1:3493
> 0.000000 listen_add: added 127.0.0.1:3493
> 0.015628 setuptcp: try to bind to 127.0.0.1 port 3493
> 0.031310 listening on 127.0.0.1 port 3493
> 0.031310 setuptcp: try to bind to ::1 port 3493
> 0.031310 listening on ::1 port 3493
> 0.031310 Connected to UPS [xs1500]: usbhid-ups-xs1500
> 0.046874 mainloop: wait for 4 filedescriptors
> <snip>
> 33.390678 mainloop: no data available
> 33.390678 Pinging UPS [xs1500]
> 33.390678 mainloop: wait for 4 filedescriptors
> 33.406254 Got PONG from UPS [xs1500]
> 33.406254 mainloop: wait for 4 filedescriptors
> 34.749994 Out of memory
>
>
> Is there any way for you to put a breakpoint in upsd.c:mainloop(), and
> step forward to see what is triggering the "Out of memory" error?
>
I will see if I can get this running under a debugger, though I imagine I
will need to get it building on my on machine first.
>
> upsc only shows a generic error:
>
> C:\Program Files (x86)\NUT\bin>upsc xs1500
> Error: Write error: Unknown error
>
>
> After upsd dies, nothing is listening on the socket, so there won't be any
> descriptive error messages from upsc. However, I was hoping for something
> along the lines of "Connection refused" :-/
>
> However, usbhid-upd.exe displays the following:
>
> C:\Program Files (x86)\NUT\bin>usbhid-ups.exe -a xs1500 -DD
> Network UPS Tools - Generic HID driver 0.37 (2.6.5-3723:3731M)
> USB communication driver 0.31
> 0.000000 debug level is '2'
> 0.000000 upsdrv_initups...
> 0.000000 Checking device (051D/0002)
> (bus-0/\\.\libusb0-0001--0x051d-0x0002)
> 0.015628 - VendorID: 051d
> 0.015628 - ProductID: 0002
> 0.031251 - Manufacturer: American Power Conversion
> 0.031251 - Product: Back-UPS BX1500G FW:866.L5 .D USB FW:L5
> 0.031251 - Serial Number: 3B1045X04728
> 0.046933 - Bus: bus-0
> 0.046933 Trying to match device
> 0.062500 Device matches
> 0.091516 HID descriptor length 1133
> 0.092016 Report Descriptor size = 1133
> 0.107654 Using subdriver: APC HID 0.95
> <snip>
> 32.094517 upsdrv_updateinfo...
> 32.094517 Got 3 HID objects...
> 32.110104 Quick update...
> 32.813233 Read error : 109
> 34.094483 upsdrv_updateinfo...
> 34.110249 Got 2 HID objects...
> 34.141355 Full update...
>
> I'm not sure if the 'Read error' is indicative of anything, but it occurs
> exactly when upsd crashes with the 'Out of memory' error.
>
>
> Does the driver keep going after that?
>
>
Yes, the driver keeps running. It prints out "Read error : 109", which I am
guessing is the value of errno that is set after calling select() on line
560 of upsclient.c. I could be wrong though.
> This is a bit of a shot in the dark (especially because your ProductID of
> 0002 is one of the less-broken ones) but do you still get the read error if
> you add the "pollonly" option to the UPS-specific part of ups.conf (i.e.
> after [xs1500])?
>
Sadly, no, that doesn't seem to improve the outcome. If feels like upsd
fails during a malloc or something similar resulting from the read failure
in the driver. If I can get the sources building on my on computer, I will
try to debug and see where the exact point of failure is at.
Thanks for all the help.
>
> --
> Charles Lepple
> clepple at gmail
>
>
>
>
--
Ryan Sizemore
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/nut-upsuser/attachments/20150127/60a740f5/attachment-0001.html>
More information about the Nut-upsuser
mailing list