Jean Brouwers added the comment: Attached is a simple test case which demonstrates the problem on Linux and MacOS X. It is not an xxmodule example, though and hope this is OK.
See the comments for build steps and example output with 3 different Python builds on both platforms. If you need another test case which uses Py_AtExit, let me know. Added file: http://bugs.python.org/file8620/dlibtest.c __________________________________ Tracker <[EMAIL PROTECTED]> <http://bugs.python.org/issue1329> __________________________________
#include "stdio.h" #ifndef __GNUC__ # error require GNU compiler #endif static void __attribute__((constructor)) /* called on main() */ _ctor (void) { printf("*** %s called ...\n", "ctor"); } static void __attribute__((destructor)) /* called on exit() */ _dtor (void) { printf("*** %s called ...\n", "dtor"); } /* ===================================================== Build this file into a shared library, then pre-load that library with the Python binary as follows. On Linux, compile as gcc -o dlibtest.os -c -m32 -Wall -Werror dlibtest.c gcc -o dlibtest.so -m32 -ldl -shared dlibtest.os and then run env LD_PRELOAD dlibtest.so .../python On MacOS X, compile as gcc -o dlibtest.os -c -Wall -Werror -march=i686 -fPIC dlibtest.c gcc -o dlibtest.dylib -undefined dynamic_lookup -lpthread -dynamiclib dlibtest.os and run env DYLD_INSERT_LIBRARIES=./dlibtest.dylib .../python.exe After Ctrl-D two messages should have been printed, but 3.0a1 prints only the first one. Here is a log from Linux with my 3.0a1 and 2.51 builds and with 2.3.4 included with the Linux distro: $ gcc -o dlibtest.os -c -m32 -Wall -Werror dlibtest.c $ gcc -o dlibtest.so -m32 -ldl -shared dlibtest.os $ env LD_PRELOAD=./dlibtest.so ~/Python-3.0a1/python *** ctor called ... Python 3.0a1 (py3k, Oct 26 2007, 09:45:17) [GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> $ env LD_PRELOAD=./dlibtest.so ~/Python-2.5.1/python *** ctor called ... Python 2.5.1 (r251:54863, Oct 22 2007, 16:19:11) [GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> *** dtor called ... $ env LD_PRELOAD=./dlibtest.so /usr/bin/python *** ctor called ... Python 2.3.4 (#1, May 2 2007, 19:26:00) [GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> *** dtor called ... Similarly on MacOS X with Python 2.3.5 distributed by Apple: % env DYLD_INSERT_LIBRARIES=./dlibtest.dylib ~/Python-3.0a1/python.exe *** ctor called ... Python 3.0a1 (py3k, Oct 25 2007, 14:55:57) [GCC 4.0.1 (Apple Computer, Inc. build 5367)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> ^D % env DYLD_INSERT_LIBRARIES=./dlibtest.dylib ~/Python-2.5.1/python.exe *** ctor called ... Python 2.5.1 (r251:54863, Oct 22 2007, 16:18:08) [GCC 4.0.1 (Apple Computer, Inc. build 5341)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> ^D *** dtor called ... % env DYLD_INSERT_LIBRARIES=./dlibtest.dylib /usr/bin/python *** ctor called ... Python 2.3.5 (#1, Jan 13 2006, 20:13:11) [GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> ^D *** dtor called ... /Jean Brouwers <[EMAIL PROTECTED]> PS) For more details on the con/destructor attributes, see the GNU gcc documentation at <http://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Function-Attributes.html> See also Apple's documentation DynamicLibrary.pdf which contains some excellent examples plus special MacOS X features. E.g. c/dtor must be ZPRIVATE and a static ctor can have main-like argc, argv and envp arguments! ===================================================== */
_______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com