[Nut-upsuser] upsd crashes with a "broken pipe" error

Zach La Celle lacelle at roboticresearch.com
Wed Feb 16 14:41:09 UTC 2011


On 02/15/2011 03:48 PM, Zach La Celle wrote:
> On 02/15/2011 03:27 PM, Arjen de Korte wrote:
>> Citeren Zach La Celle <lacelle at roboticresearch.com>:
>>
>>> You can see where the problem happens in parseconf.c, on line 125 
>>> with the code:
>>> /* resize the lists */
>>> ctx->arglist = realloc(ctx->arglist,
>>>                                    sizeof(char *) * ctx->numargs);
>>
>> With the given arguments, this boils down to
>>
>>     ctx->arglist = realloc(NULL, sizeof(char *));
>>
>> This is all normal. Upon the first invocation of add_arg_word, 
>> ctx->arglist will be a NULL pointer (since there is nothing in the 
>> list yet). This should then allocate a one element array of a pointer 
>> to char (to store the
>>
>> "If ptr is a null pointer, realloc() shall be equivalent to malloc() 
>> for the specified size."
>>
>> After that, all hell breaks loose, but that's out of our control.
>>
>> There is a slight problem in lines 131-132
>>
>>     ctx->argsize = realloc(ctx->argsize, sizeof(int *) * ctx->numargs);
>>
>> which should really read
>>
>>     ctx->argsize = realloc(ctx->argsize, sizeof(size_t) * ctx->numargs);
>>
>> but I doubt that sizeof(size_t) will be smaller that sizeof(int *), 
>> so this just wastes a few bytes of memory.
>>
>>> This also might help:
>>> (gdb) p *ctx
>>> $4 = {f = 0x0, state = 5, ch = 9, arglist = 0x0, argsize = 0x0, 
>>> numargs = 1, maxargs = 1, wordbuf = 0x61f2e0 "Z", wordptr = 0x61f2fd 
>>> "", wordbufsize = 16, linenum = 0, error = 0, errmsg = '\000' 
>>> <repeats 255 times>, errhandler = 0, magic = 7497264, arg_limit = 
>>> 32, wordlen_limit = 512}
>>
>> None of these values is suspect.
>>
>>> If I go "up" in GDB to the pconf_char function, here is the 
>>> character which is killing it:
>>> (gdb) p ch
>>> $6 = 9 '\t'
>>
>> This is expected. Any whitespace character ends the collection of 
>> characters for the current argument and will start a new one. Nothing 
>> out of the ordinary. If it was, 100% of the NUT installations would 
>> suffer the same problems as you're seeing 100% of the time they start 
>> the upsd server. This is not the case and even in your case, the 
>> problem seems to occur intermittently, which is more an indication 
>> you're either running out of memory or the system is suffering from 
>> bad memory. Did you run a memory check lately?
>>
>> Best regards, Arjen
> I will run memtest86 tonight when I can garner some time to bring the 
> server down.  It has 4GB of memory and is currently utilizing only 
> 500MB, so I doubt it runs out.  Nothing else is crashing.  It only 
> runs email and apache.
>
> Thank you for your help,
>
> -Zach
>
> _______________________________________________
> Nut-upsuser mailing list
> Nut-upsuser at lists.alioth.debian.org
> http://lists.alioth.debian.org/mailman/listinfo/nut-upsuser
On the Dell server, the MpMemory testing all passed.  It doesn't seem to 
be a physical problem with the memory on the machine.  I also ran some 
other basic diagnostics on the disk drives, cache, and the rest of the 
system, and it all passed as well.

Any further ideas?

Thanks,

-Zach



More information about the Nut-upsuser mailing list