This is the mail archive of the
cygwin-developers@cygwin.com
mailing list for the Cygwin project.
FYI on private static object construction
- From: Joe Buehler <jbuehler at hekimian dot com>
- To: Cygwin Developers <cygwin-developers at cygwin dot com>
- Date: Thu, 08 Aug 2002 10:03:40 -0400
- Subject: FYI on private static object construction
- Organization: Spirent Communications
- Reply-to: joseph dot buehler at spirentcom dot com
Just an FYI to the Cygwin team:
It appears from discussion on the gcc list that private static
objects in C++ functions are constructed when they are encountered
in program flow. E.g.:
f()
{
whatever...
// "x" is constructed when program flow gets here
static some_class x;
whatever...
}
This construction is not thread-safe in gcc at present. Nor does
it appear that it is required to be so by the C++ standard. This
can result in multiple construction of the object, and multiple
parallel calls to atexit() (used to schedule destruction), which
is also not currently thread-safe, and can cause null pointer
dereferences.
So I would recommend that in Cygwin such objects be moved out of
functions to global scope, to avoid threading issues.
I suspect that this is what is causing my problems with atexit().
Gcc generates functions with "tcf" in the name (e.g. __tcf_0) for
this sort of code, so it is easy to tell whether a particular object
has the problem.
Joe Buehler