This is the mail archive of the
ecos-patches@sourceware.org
mailing list for the eCos project.
Initialization order problem in io/wallclock/
- From: Rutger Hofman <rutger at cs dot vu dot nl>
- To: ecos-patches at ecos dot sourceware dot org
- Date: Fri, 11 Jan 2008 14:58:19 +0100
- Subject: Initialization order problem in io/wallclock/
Good afternoon,
the io/wallclock/ static initializer currently runs after
CYG_INIT_CLOCK. However, the I2C device that may control the clock, or
the clock itself, may use mutexes. Therefore the initializer order must
be _AFTER( CYG_INIT_THREADS).
I ran into this when I enabled assertions in eCos: the mutex in my I2C
was used before the thread package was initialized, and this caused an
assertion failure.
Patch attached. Is this format OK? I merged eCos into our SVN
repository, so the diff format will be slightly different from cvs diff
output.
Rutger Hofman
VU Amsterdam
Index: packages/io/wallclock/current/src/wallclock.cxx
===================================================================
--- packages/io/wallclock/current/src/wallclock.cxx (revision 160)
+++ packages/io/wallclock/current/src/wallclock.cxx (working copy)
@@ -80,7 +80,7 @@
//-----------------------------------------------------------------------------
// Local static variables
-static Cyg_WallClock wallclock_instance CYGBLD_ATTRIB_INIT_AFTER( CYG_INIT_CLOCK );
+static Cyg_WallClock wallclock_instance CYGBLD_ATTRIB_INIT_AFTER( CYG_INIT_THREADS );
#ifndef CYGSEM_WALLCLOCK_SET_GET_MODE
static cyg_uint32 epoch_ticks;
Index: packages/io/wallclock/current/ChangeLog
===================================================================
--- packages/io/wallclock/current/ChangeLog (revision 153)
+++ packages/io/wallclock/current/ChangeLog (working copy)
@@ -1,3 +1,7 @@
+2008-01-11 Rutger Hofman <rutger@cs.vu.nl>
+ * src/wallclock.cxx: using a mutex, here or in the I2C code,
+ requires that the static initializer runs after CYG_INIT_THREADS.
+
2007-01-14 Gary Thomas <gary@mlbassoc.com>
* src/wallclock.cxx: Use a mutex for exclusion during get/set