[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