|
Message-ID: <20150723030719.GB382@port70.net>
Date: Thu, 23 Jul 2015 05:07:21 +0200
From: Szabolcs Nagy <nsz@...t70.net>
To: musl@...ts.openwall.com
Subject: Re: [PATCH] fix atexit when it is called from an atexit
handler
* Rich Felker <dalias@...c.org> [2015-07-22 21:18:16 -0400]:
> On Thu, Jul 23, 2015 at 01:44:06AM +0200, Szabolcs Nagy wrote:
> > void __funcs_on_exit()
> > {
> > int i;
> > void (*func)(void *), *arg;
> > LOCK(lock);
> > - for (; head; head=head->next) for (i=COUNT-1; i>=0; i--) {
> > - if (!head->f[i]) continue;
> > + for (;;) {
> > + i = next();
> > + if (i<0) break;
> > func = head->f[i];
> > arg = head->a[i];
> > head->f[i] = 0;
>
> I agree that this change should be made, but I don't like the
> particulars of the patch. It seems to increase exit handler runtime to
> O(n²) even in the case where no atexit is happening during exit, and
> it's not very elegant. I think a simpler solution would be to reset i
> to COUNT after calling f[i] if either (1) head has changed, or (2)
> i<COUNT-1 and f[i+1] is nonzero. Does this sound correct/better?
(2) should be 'f[i] is nonzero'.
i didnt think about detecting the change of head,
but it is simpler and better for the common case.
View attachment "0001-fix-atexit-when-it-is-called-from-an-atexit-handler.patch" of type "text/x-diff" (1454 bytes)
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.