* All Main Python Modules:

- Change: New problem identified with the Python modules: each module seems
        to be built as a complete binary, so all the static C++ initializers are
        allocated in each module. In particular the C++ tree inheritance is built
        for *each* module so we cannot longer uses the typeid() comparisons
        across modules... It was used by boost::program_options to perform is
        casts with boost::any and was starting throwing exceptions because of
        bad casts. program_option was first initialized in "configuration"
        first included by PyViewer then in PyCRL (see Utilities.cpp).
          A first solution is to re-order the import of Python modules in
        stratus1/st_model so that CRL is imported first.
          The second is to not not link "configuration" with boost::program_option
        as only the binary vlsisapd-conf-editor needs it.
          That is a serious problem of which we must be aware and can cause further
        strange behaviors.
          Debug code used to diagnostic has been kept commented in the sources a
        it may be needed again :-(
          This behavior do not affect our singletons because they are part of
        dynamic libraries that seems to be correctly shared between the various
        Python modules.
This commit is contained in:
Jean-Paul Chaput 2010-07-17 10:22:00 +00:00
parent 73fa2f5f7c
commit 3774c09bab
2 changed files with 4 additions and 0 deletions

View File

@ -674,6 +674,8 @@ extern "C" {
NetLoadConstants ( dictionnary ); NetLoadConstants ( dictionnary );
InstanceLoadConstants ( dictionnary ); InstanceLoadConstants ( dictionnary );
PinLoadConstants ( dictionnary ); PinLoadConstants ( dictionnary );
trace << "Hurricane.so loaded " << (void*)&typeid(string) << endl;
} }

View File

@ -90,6 +90,8 @@ extern "C" {
PyObject* dictionnary = PyModule_GetDict ( module ); PyObject* dictionnary = PyModule_GetDict ( module );
//DbULoadConstants ( dictionnary ); //DbULoadConstants ( dictionnary );
trace << "Viewer.so loaded " << (void*)&typeid(string) << endl;
} }