Date: Sat, 5 Jan 2002 21:46:44 -0800 From: Kamal A Mostafa <kamal@whence.com> To: Riccardo Facchetti <riccardo@master.oasi.gpa.it>, Kern Sibbald <kern@sibbald.com> Subject: new EVENTSFILEMAX code Hi Guys- Well, I went ahead and rewrote truncate_events_file() from scratch -- it was a nice file-size-based thing that used no malloc's. Alas, while testing it I discovered a rather nasty bug which, I believe, has been present since at least 3.8.4... I was running some tests where I'd fill up the events file to force the new truncation code to kick in. The new code worked fine, but when I killed off apcupsd, I noticed that I didn't get the usual "apcupsd exiting, signal 15" and "apcupsd shutdown succeeded" log_event() messages that should have been at the tail end of the eventsfile. I suspect that the function terminate() is using an old copy of the event_fd file descriptor (which has since been closed) or something along those lines. As I see it, any truncation scheme which closes and reopens the ups->evend_fd would cause this problem. Maybe truncation screws up the forked children or threads also. Bummer. So I rewrote it again. My new trim_eventfile() doesn't ever close the ups->event_fd -- that's probably just "better" anyway. The basic premise is rewind, read, rewind, truncate, write. And sure enough, now I get the "exiting" messages even after the file has been trimmed, so I think all is well. *Whew* I'm sorry I ever started poking at it in the first place! ;-} Anyway... The new version replaces the TRIMEVENTSFILE [on|off] param with "EVENTSFILEMAX <kilobytes>". I've attached two versions of the patch. Use one or the other, depending on whether you have or haven't already applied my previous TRIMEVENTSFILE patch. apc.evmax-398.patch -applies to apcupsd-3.9.8-18Dec01 apc.evmax-kamal.patch -applies to TRIMEVENTSFILE version Comments? =================== KES: Integrated 9Jan02 there were a number of rejects due to space/tab mangling.