Re: [PATCH 10/10] timegm: add portable implementation (Solaris support)

Subject: Re: [PATCH 10/10] timegm: add portable implementation (Solaris support)

Date: Sun, 04 Nov 2012 07:40:50 -0800

To: Jani Nikula

Cc: notmuch@notmuchmail.org

From: Blake Jones


Hi Jani,

> I'd prefer to use timegm() where available, and the suggested
> alternative [1] elsewhere.
> 
> [1] http://www.kernel.org/doc/man-pages/online/pages/man3/timegm.3.html

I considered this alternative, but decided against it because it's
completely MT-unsafe.  I don't know whether libnotmuch itself is
MT-safe, but a process which called this routine in one thread would
temporarily throw off any timezone-related work that any other threads
were doing, even if they weren't using libnotmuch.

> I'll look into the compat build issues when I have a moment.

If you do, here's a boiled-down version of the problem that I came up
with while investigating it:

    $ echo 'int main() { extern int foo1(); return foo1(); }' > main.c
    $ echo 'int foo1() { extern int bar();  return bar();  }' > foo1.c
    $ echo 'int bar()  { extern int foo2(); return foo2(); }' > bar.c
    $ echo 'int foo2() { return 0;                         }' > foo2.c
    $ gcc -c main.c foo1.c bar.c foo2.c
    $ ar rcs libfoo.a foo1.o foo2.o
    $ ar rcs libbar.a bar.o
    $ gcc -o main main.o libfoo.a libbar.a
      [fails]
    $ gcc -o main main.o libbar.a libfoo.a
      [fails]

Another alternative would be to just include parse-time-string.o in
libnotmuch.a directly; I think that would solve the problem.

Blake

Thread: