diff options
-rw-r--r-- | Demo/embed/Makefile | 9 | ||||
-rw-r--r-- | Demo/embed/README | 7 | ||||
-rw-r--r-- | Demo/embed/loop.c | 26 |
3 files changed, 41 insertions, 1 deletions
diff --git a/Demo/embed/Makefile b/Demo/embed/Makefile index fb2b1ed..ee0196b 100644 --- a/Demo/embed/Makefile +++ b/Demo/embed/Makefile @@ -32,13 +32,20 @@ all: demo demo: demo.o $(CC) $(LDFLAGS) demo.o $(ALLLIBS) -o demo +loop: loop.o + $(CC) $(LDFLAGS) loop.o $(ALLLIBS) -o loop + # Administrative targets test: demo ./demo +COMMAND="print 'hello world'" +looptest: loop + ./loop $(COMMAND) + clean: -rm -f *.o core clobber: clean - -rm -f *~ @* '#'* demo + -rm -f *~ @* '#'* demo loop diff --git a/Demo/embed/README b/Demo/embed/README index 8858c71..a0f7af8 100644 --- a/Demo/embed/README +++ b/Demo/embed/README @@ -10,3 +10,10 @@ the source directory (../..) 2) change the variables that together define the list of libraries (MODLIBS, LIBS, SYSLIBS) to link with, to match their definitions in $(blddir)/Modules/Makefile + +An additional test program, loop.c, is used to experiment with memory +leakage caused by repeated initialization and finalization of the +interpreter. It can be build by saying "make loop" and tested with +"make looptest". Command line usage is "./loop <python-command>", +e.g. "./loop 'print 2+2'" should spit out an endless number of lines +containing the number 4. diff --git a/Demo/embed/loop.c b/Demo/embed/loop.c new file mode 100644 index 0000000..ca89cb7 --- /dev/null +++ b/Demo/embed/loop.c @@ -0,0 +1,26 @@ +/* Simple program that repeatedly calls Py_Initialize(), does something, and + then calls Py_Finalize(). This should help finding leaks related to + initialization. */ + +#include "Python.h" + +main(int argc, char **argv) +{ + char *command; + + if (argc != 2) { + fprintf(stderr, "usage: loop <python-command>\n"); + exit(2); + } + + command = argv[1]; + + Py_SetProgramName(argv[0]); + + while (1) { + Py_Initialize(); + PyRun_SimpleString(command); + Py_Finalize(); + } + /*NOTREACHED*/ +} |